1

我正在尝试参数化查询,例如:

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数据类型(变体?未知?字符串?)(是的,谁把我的标题改成了什么)
4

0 回答 0