C# 在OleDbDataReader中从MS ACCESS读取具有特殊名称的属性
当accdb数据库的字段名包含诸如“-”、“%”和“/”之类的字符或字段名为“Level”时,我在读取accdb数据库时遇到som问题。 当我有这样的事情时:C# 在OleDbDataReader中从MS ACCESS读取具有特殊名称的属性,c#,ms-access,oledbdatareader,C#,Ms Access,Oledbdatareader,当accdb数据库的字段名包含诸如“-”、“%”和“/”之类的字符或字段名为“Level”时,我在读取accdb数据库时遇到som问题。 当我有这样的事情时: string mySelectQuery = "SELECT 'Part_Time_%','Level',Level_change_reason FROM Employees"; OleDbConnection myConnection = new OleDbConnection(oledbConnectString); OleDbCom
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)....
它跳转到捕捉语句。
我还尝试了myReader[“\u004evel”],myReader[“'Macro-activity'”
——它完全忽略转义字符
我们将非常感谢您的每一个答复
注意:我无法更改属性的名称。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)....
感谢您的回答,但SELECT语句工作得非常好,但此myReader[“宏活动”]和此myReader[“级别”]失败。我第一次使用这个myReader.GetItem(1),但当单元格为空时,它失败了。所以我使用myReader[“Local\u Global\u Structure”]==DBNull.Value作为控件。这里是myReader.GetItem(1)是否有可能执行此控件?myReader[“[Macro activity]”是您想要的。当我删除catch语句时,则IndexOutfrange未处理。