0

当 accdb 数据库的字段名称带有“-”、“%”、“/”等字符或字段名称为“Level”时,我在从 accdb 数据库读取时遇到了一些问题。当我有这样的事情时:

string mySelectQuery = "SELECT 'Part_Time_%','Level',Level_change_reason FROM Employees";
OleDbConnection myConnection = new OleDbConnection(oledbConnectString);
OleDbCommand myCommand = new OleDbCommand(mySelectQuery,myConnection);
myConnection.Open();
OleDbDataReader myReader = myCommand.ExecuteReader();

它运作良好,因为 '' 字符取消了特殊字符和单词meening。还行吧:

if ((myReader["Name"] == DBNull.Value) ....
if ((myReader["Surname"] == DBNull.Value) ....

但是当我尝试这个时:

if ((myReader["Macro-activity"] == DBNull.Value) ...
if ((myReader["Level"] == DBNull.Value)....

它跳转到 catch 语句。我也试过myReader["\u004cevel"], myReader["'Macro-activity'"]- 它完全忽略了转义字符。

每个答案将不胜感激。

PS:我不能更改属性的名称。

4

2 回答 2

1

Access 中的列名转义使用大括号 , [ & ],而不是单引号。

string mySelectQuery = "SELECT '[Part_Time_%],[Level],Level_change_reason FROM Employees";

单引号用于字符串,因此在 select 语句中使用 'Level' 会将文本 'Level' 作为结果集中的未命名列返回。如果您尝试myReader.GetItem(1),它将返回"Level"每一行。

于 2012-05-29T00:04:32.833 回答
0

我找到了这个,它做了我想要的:

if ((myReader.GetValue(18) == DBNull.Value) || string.Compare(myReader.GetValue(18).ToString(), "0") == 0)....
于 2012-05-29T08:24:26.580 回答