Sql server &引用;不允许的隐式转换“;将Unicode字符串与ADO参数化查询一起使用时:是否有;使用任何兼容的“;数据类型?

Sql server &引用;不允许的隐式转换“;将Unicode字符串与ADO参数化查询一起使用时:是否有;使用任何兼容的“;数据类型?,sql-server,sql-server-2008-r2,ado,Sql Server,Sql Server 2008 R2,Ado,我正在尝试参数化查询,例如: INSERT INTO Trunions (Encabulator) VALUES (?) 这来自(示例)查询: 现在,只要SQL Server数据库表包含某种兼容的字符串列,此查询就会运行: char(300) nchar(300) varchar(300) nvarchar(300) text ntext varchar(最大值) nvarchar(最大值) 我原来的,函数查询将起作用。一旦我参数化查询,代码就不再工作: String sql = "INS

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

INSERT INTO Trunions (Encabulator) VALUES (?)
这来自(示例)查询:

现在,只要SQL Server数据库表包含某种兼容的字符串列,此查询就会运行:

  • char(300)
  • nchar(300)
  • varchar(300)
  • nvarchar(300)
  • text
  • ntext
  • varchar(最大值)
  • nvarchar(最大值)
我原来的,函数查询将起作用。一旦我参数化查询,代码就不再工作:

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

  • 该死的。当使用ADO参数化的Unicode字符串时,我在谷歌上做了更多的搜索:“不允许隐式转换”。“嘿,这正是我所经历的!哦,等等。:(我讨厌这种情况:-)
    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);