0

「-」、「%」、「/」などの文字を含むフィールド名がある場合、またはフィールド名が「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();

'' 文字は特殊文字と単語の意味をキャンセルするため、うまく機能します。これで結構です:

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 に答える