首页 > 解决方案 > 带有 Unicode 字符的 MFC ODBC 存储过程参数

问题描述

存储过程是这样的

CREATE PROCEDURE [dbo].[InsertItemsSPRoc] 
-- Add the parameters for the stored procedure here
@File_Name nvarchar(400) =  NULL,   -- file name to be inserted
@Path_File_Name nvarchar(400) = NULL,   -- path file name to be inserted

    -- insert in the Media_Files FILETABLE
    -- set the specific table holder
    set @sql = N'insert into Media_Files (name, file_stream) (SELECT ''' + @File_Name + ''', * FROM OPENROWSET(BULK N''' + @Path_File_Name + ''', SINGLE_BLOB) AS FileData)'

    -- execute the combined statement
    exec(@sql)

存储过程是通过 MFC 语句调用的,并且当传递的参数是 ANSI(即英文字母)时执行得很好。当用户选择文件名由 Unicode 字母组成的文件时出现问题,例如“Ένα Δείγμα.mp4”(在我看来绝对是希腊人),我得到的豁免如下:

无法批量加载,因为无法打开文件“D:??? ??????.mp4”。操作系统错误代码 123(文件名、目录名或卷标语法不正确。)。

显然 ODBC 驱动程序正在传递乱码或其他东西。

我尝试使用 MSSM Studio 使用相同的参数调试/执行相同的存储过程,没有问题。

如何在存储过程中传递参数?

标签: stored-proceduresunicodemfcodbc

解决方案


它是数据库的代码页。当我改变时,确实很痛苦,因为表之间有很多依赖关系,到排序规则

SQL_Latin1_General_CP1253_CI_AS

, 微软专门针对希腊人,问题已解决,通过 MFC 调用存储过程接收到的希腊字符在哪里被识别


推荐阅读