【发布时间】:2021-10-13 04:08:01
【问题描述】:
我在我的 VB.Net 应用程序中使用 MDB (Access 2007) 和 OleDbConnection。当我搜索非 Unicode 文本时,它搜索得很好。但是当我使用 Unicode 文本搜索时,它会引发异常。我搜索了很多,在 StackOverflow 中找到了一些关于 Unicode 搜索的示例,他们建议在 ' 字符之前使用 N,如下所示。
OleDbConn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=DbOnlyforBathu.mdb"
'sql = "SELECT * FROM TableNotes WHERE NotesDetail like '%" & "hello" & "%'" 'Works fine for Non-Unicode
'sql = "SELECT * FROM TableNotes WHERE NotesDetail like '%commonWord%'" 'Works fine, returns all results inclu. unicode
'sql = "SELECT * FROM TableNotes WHERE NotesDetail LIKE 'N%வா%'" 'no errors; no results
sql = "SELECT * FROM TableNotes WHERE NotesDetail like N'%" & "வா" & "%'" 'throws error for Unicode
sql = "SELECT * FROM TableNotes WHERE NotesDetail like '*வா*'" 'no errors; no results
da = New OleDb.OleDbDataAdapter(sql, OleDbConn)
da.Fill(ds, TableResult)
但是当我在 ' 字符之前使用 N 时,它会引发此错误。此错误是什么意思以及如何搜索 unicode 文本?
System.Data.OleDb.OleDbException: '查询表达式'NotesDetail like N'%வா%''中的语法错误(缺少运算符)。'
请注意:“வா”是泰米尔语文本。
更新:我将 mdb 转换为 accdb 并使用了适当的连接字符串(“Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Db.accdb;”),但仍然是同样的问题。但是,它适用于非 Unicode 文本。
【问题讨论】:
-
尝试将撇号放在 N 之前。
-
@June7 没有错误,将撇号放在 N 之前没有结果。
-
您是对的,指导是在 SQLServer 查询中将 N 放在撇号之外,但您的查询位于 Access 表上。我用 Access 表做了一个测试。我将这些字符复制/粘贴到字段中。我构建了一个不使用 N 限定符或通配符的查询。查询有效。然后我用 % 通配符进行了测试,没有返回任何记录。我使用了 * 通配符,这很有效。
-
@June7,感谢您的努力。不幸的是,在这里,它既不返回任何结果,也不抛出任何错误。您是否尝试使用 MDB (2007),从任何 C#/Vb.net 代码中搜索?
-
我没有 C# 或 VB.net。不知道为什么它不能从 VB 运行。我只知道它在 Access 2010 中使用 accdb 文件工作。
标签: sql vb.net ms-access oledb