C# OleDbCommand和Unicode字符

C# OleDbCommand和Unicode字符,c#,sql,unicode,ado.net,oledbcommand,C#,Sql,Unicode,Ado.net,Oledbcommand,我有一个使用OleDbCommand运行大量查询的应用程序。每个查询都是纯SQL文本,并且该命令不使用参数 现在,应用程序应该支持中文字符,我不想通过在要指定的字符串前面添加N字符来更改每个查询 我正在尝试做类似的事情,但它不起作用: OleDbCommand command = new OleDbCommand("?", connect); command.CommandType = CommandType.Text; command.Param

我有一个使用OleDbCommand运行大量查询的应用程序。每个查询都是纯SQL文本,并且该命令不使用参数

现在,应用程序应该支持中文字符,我不想通过在要指定的字符串前面添加N字符来更改每个查询

我正在尝试做类似的事情,但它不起作用:

        OleDbCommand command = new OleDbCommand("?", connect);
        command.CommandType = CommandType.Text;
        command.Parameters.AddWithValue("query", qry);
        OleDbDataAdapter da = new OleDbDataAdapter(command);
其中qry是要执行的查询,每个字符串前面没有N个字符

我真的不想改变每一个问题,这将是一个混乱


您有解决方案吗?

您需要设置参数的数据类型,或者使用Add重载,或者使用new创建参数,设置属性,然后将其添加到集合中

以下是OleDb数据类型:

VarWChar是unicode

如果您使用的是SqlServer,那么您可能希望使用本机驱动程序,以便获得Sql数据类型,这些数据类型具有更精确的匹配


如果您打算实现跨数据库兼容性,那么您可能会选择相反的方向,使用System.Data.Common数据类型、DbType.XXX、ref(或者ODBC及其类型枚举,因为MS说他们正在逐步淘汰OleDb作为一种有利于ODBC的技术)

我在查询中不使用参数。那么您可能发布了错误的源代码,因为这会添加一个参数:command.Parameters.AddWithValue(“query”,qry);它名为query,值为qry。我不知道你在哪里设置了commandText。我发布的代码只是一个尝试。我只有文字sql可以执行,没有参数。我必须按原样执行命令,我无法设置参数来解决Unicode问题。因此,我试图将命令文本视为一个参数,但它不起作用。