当 accdb 数据库的字段名称包含"-"、"%"、"/"等字符或字段名称为"级别"时,我在从 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();
它工作得很好,因为"字符会取消特殊字符和单词含义。没关系:
if ((myReader["Name"] == DBNull.Value) ....
if ((myReader["Surname"] == DBNull.Value) ....
但是当我尝试这个时:
if ((myReader["Macro-activity"] == DBNull.Value) ...
if ((myReader["Level"] == DBNull.Value)....
它跳转到捕获语句。我也尝试了myReader["u004cevel"], myReader["'Macro-activity'"]
- 它完全忽略了转义字符。
每个答案将不胜感激。
PS:我无法更改属性的名称。
Access 中列名的转义使用大括号、[ & ]
,而不是单引号。
string mySelectQuery = "SELECT '[Part_Time_%],[Level],Level_change_reason FROM Employees";
单引号用于字符串,因此在 select 语句中使用"Level"将返回文本"Level"作为结果集中的未命名列。 如果您尝试myReader.GetItem(1)
它将为每一行返回"Level"
。
我找到了这个,它做了我想要的:
if ((myReader.GetValue(18) == DBNull.Value) || string.Compare(myReader.GetValue(18).ToString(), "0") == 0)....