【问题标题】:OleDbCommand and Unicode CharOleDbCommand 和 Unicode 字符
【发布时间】:2013-04-24 10:05:12
【问题描述】:

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

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

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

        OleDbCommand command = new OleDbCommand("?", connect);
        command.CommandType = CommandType.Text;
        command.Parameters.AddWithValue("query", qry);
        OleDbDataAdapter da = new OleDbDataAdapter(command);

其中 qry 是要在每个字符串前面没有 N 字符的情况下执行的查询。

我真的不想改变每一个查询,那会一团糟。

你有解决办法吗?

【问题讨论】:

    标签: c# sql unicode ado.net oledbcommand


    【解决方案1】:

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

    以下是 OleDb 数据类型:

    http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbtype.aspx

    VarWChar 是 unicode

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

    如果您要实现跨数据库兼容性,那么您可能会反其道而行之,使用 System.Data.Common 数据类型、DbType.XXX、ref http://msdn.microsoft.com/en-us/library/system.data.dbtype.aspx(或 ODBC,它是类型枚举,因为 MS 说它们是逐步淘汰 OleDb 作为支持 ODBC 的技术)

    【讨论】:

    • 我的查询中没有使用参数。
    • 那你可能贴错了源码,因为这增加了一个参数:command.Parameters.AddWithValue("query", qry);它被命名为查询并且具有 qry 的值。不过,我看不到您在哪里设置了 commandText。
    • 我发布的代码只是一个尝试。我只有文字 sql 可以在没有参数的情况下执行。我必须“按原样”执行命令,并且无法设置参数来解决 Unicode 问题。所以我试图将命令文本视为参数,但它不起作用。
    猜你喜欢
    • 2015-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-02
    • 2014-11-25
    • 2012-09-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多