stored-procedures - 带有 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 使用相同的参数调试/执行相同的存储过程,没有问题。
如何在存储过程中传递参数?
解决方案
它是数据库的代码页。当我改变时,确实很痛苦,因为表之间有很多依赖关系,到排序规则
SQL_Latin1_General_CP1253_CI_AS
, 微软专门针对希腊人,问题已解决,通过 MFC 调用存储过程接收到的希腊字符在哪里被识别
推荐阅读
- antlr - 我可以添加不能在词法分析器规则中应用的语法词吗?
- ios - Swift:具有相同函数名的协议和基类
- jenkins - Jenkins 为管道构建选择变更集作业
- css - React JS:如何为有条件渲染的组件设置动画?
- python - 使用 Brief、BRISK、AKAZE 和 FREAK 检测到零关键点
- javascript - 如何在项目后添加 const。而不是数据中的名称?
- julia - 导出函数名称会导出 Julia 中所有不同的函数版本吗?
- node.js - 使用 Facebook 实时数据的 Power BI 报表
- mysql - SQL LEFT JOIN 未使用表 2 中的值填充列
- python - Django查询多对多关系以查找用户