編集: 1) 名前 != 名前、これは問題ではありません。コードは 99.9999% の時間で動作し、実稼働環境では時折失敗するだけです (実験室の条件下ではありません >_<) 何が起こっているのかを説明するデバッグ コードを展開していますが、それができるようになるまでは、誰かが見たことがあるかどうかを探すだけです似たようなもの。
編集:2)情報のみ。テストするために、次のコードを実行しました
...
var name = row["Name"].ToString().ToLower();
var name2 = row["name"].ToString().ToLower();
...
そして、これは実際にはうまく機能し、少なくともフレームワーク 4 では行 [xx] は大文字と小文字が区別されないことを示唆しています。いずれにせよ、残念ながら私が見ている問題ではありません。だったらいいのに:)
問題の原因となっているコードの簡単なスニペットを次に示します。これは単なるコードではなく、実際にはこのようなコードです。共通部分は、「name」がテーブル Table の列ではないことを主張する例外をスローする row["name"] です。
var command = new SqlCommand("SELECT Name FROM Table1");
DataSet result = helper.ExecuteQuery(command);
if (result == null || result.Tables.Count != 1)
{
return;
}
foreach (DataRow row in result.Tables[0].Rows)
{
var name = row["Name"].ToString().ToLower();
}
helper.ExecuteQuery は DataSet を返します。
ご覧のとおり、結果はデータセットであることがわかります。つまり、null ではなく、1 つのテーブルが含まれています。
foreach ループにいるので、行があることがわかります。Name が列として存在することはわかっています。これは、実行される sql ステートメントが常にほとんどハード コードされており、あいまいさや巧妙さがまったくないためです。
任意の考え (問題に関連していますか?) int インデクサーを使用していくつかの回避策があります。これらのクエリのほとんどは 1 つまたは 2 つの列のみを返します。最初に列を確認してください。このようなことはすべてありますが、覚えている以上にこの問題に遭遇したことはありません。