Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在OleDbDataReader中从MS ACCESS读取具有特殊名称的属性_C#_Ms Access_Oledbdatareader - Fatal编程技术网

C# 在OleDbDataReader中从MS ACCESS读取具有特殊名称的属性

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

当accdb数据库的字段名包含诸如“-”、“%”和“/”之类的字符或字段名为“Level”时,我在读取accdb数据库时遇到som问题。 当我有这样的事情时:

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未处理。