0

編集: 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 つの列のみを返します。最初に列を確認してください。このようなことはすべてありますが、覚えている以上にこの問題に遭遇したことはありません。

4

2 に答える 2

1

あなたはで試すことができますname in lower

 var name = row["name"].ToString().ToLower(); //name in lower
于 2012-10-11T18:28:56.703 に答える
0

列名で参照する場合、実際には大文字と小文字が区別されます。

row["Name"]とは異なりますrow["name"]

于 2012-10-11T18:39:08.093 に答える