【发布时间】:2012-02-13 20:44:37
【问题描述】:
我正在制作一个 OleDb.OleDbDataAdaptor 对象来填充 DataTable 对象。在OleDbDataAdaptor的构造中,我是这样初始化的:
Dim adapter As New OleDb.OleDbDataAdapter(sql, myConnection)
其中 sql 是我的查询字符串,如下所示:
Dim sql = "SELECT * FROM DBTable TC WHERE TC.Text=N'Criteria'"
我使用前面的大写 N,因为表“DBTable”中的字段“Text”应该是 unicode。 myConnection 表示与我的一个 mdb 文件的连接,其中定义了 DBTable。
但是,当我执行 adapter.Fill(myDataTable) 时,它失败并引发异常:查询表达式“TC.Text=N'Criteria”中的语法错误(缺少运算符)。有谁知道这里发生了什么?我了解到,为了处理 unicode 文本,N 是必要的。另一个问题是,如何确保 mdb 文件中的字段确实是 unicode?因为我只能看到字段数据类型是“文本”并且我使用的是 Access 2003,所以我只能假设它是 unicode。事实上,我正在为该字段启用 unicode 压缩,正如您在文本“Criteria”中看到的那样,无论如何都没有特殊字符。
感谢您的帮助!
【问题讨论】:
-
@Remou 谢谢,但我使用的不是 C#。我正在使用 VB.NET,这就是 Dim 的来源。这部分代码不是来自 MS Access 应用程序,只是它试图连接到 .mdb 数据库。但是我是否觉得与 SQL Server 不同,访问 mdb unicode 文本不需要大写 N?因为类似的代码确实适用于 SQL Server DB,但仅适用于 Access DB
-
@Remou 谢谢!。我猜这个想法是为了访问它不应该把大写 N 放在一个字符串前面,否则它会给出提到的错误。我们的程序对 Access DB 和 SQL Server DB 使用相同的例程,这就是为什么适用于 SQL Server 的例程不适用于 Access DB。