我正在尝试参数化查询,例如:
INSERT INTO Trunions (Encabulator) VALUES (?)
这来自(示例)查询:
INSERT INTO Trunions (Encabulator) VALUES ('Mẫrsểl vằnęs')
现在只要 SQL Server 数据库表包含某种兼容的字符串列,此查询就会运行:
char(300)
nchar(300)
varchar(300)
nvarchar(300)
text
ntext
varchar(max)
nvarchar(max)
我原来的功能查询将起作用。一旦我参数化查询,代码就不再起作用:
String sql = "INSERT INTO Trunions (Encabulator) VALUES (?)";
String value = "Mẫrsểl vằnęs";
Command cmd = new Command();
...
cmd.Set_CommandText(sql);
cmd.Set_CommandType(adCmdText);
cmd.Parameters.Append(cmd.CreateParameter("param1", adLongVarWChar, adParamInput, -1, value);
cmd.Execute(out recordsAffected, Null, adCmdText | adExecuteNoRecords);
SQL Server 报错参数类型与列数据类型不匹配(即地毯与窗帘不匹配):
不允许从数据类型 %s 到数据类型 %s、表 '%s'、列 '%s' 的隐式转换。
使用 CONVERT 函数运行此查询
在此示例中,我尝试使用“最佳”(即最具包容性的数据类型)adLongVarWChar
:.
但我需要的是可以替代“任意长度的 unicode 字符串”的数据类型。
将哪种 ADO 参数类型放入 SQL Server 字符串列中?
笔记:
- ADO,不是 ADO.net
- 这个问题是关于错误和对解决方案的开放式希望。这个问题是关于一个通用的“文本”ado数据类型(变体?未知?字符串?)(是的,谁把我的标题改成了什么)