3

を使用していてSqlDataReader、列を読み取ろうとするとこの例外が発生します...

System.IndexOutOfRangeException:レコード

これがコードです...

SqlCommand select = new SqlCommand("SELECT RTRIM(LTRIM(PART_NO)) AS PART_NO, record AS CUSTOMER_NO FROM [RMAData].[dbo].[IMPORTING_ORDER_EDI] WHERE sessionID = '" + Session.SessionID + "'", connection);
SqlDataReader reader = select.ExecuteReader();

if (reader.HasRows)
{
   while (reader.Read())
   {
       lblWebMasterMessage.Text += "record " + reader["record"].ToString() + "<br />";
...

次のように変更するlblWebMasterMessage.Textと、問題なく動作します...

lblWebMasterMessage.Text += "record " + reader["PART_NO"].ToString() + "<br />";

PART_NOレコードとSQ​​LServerテーブルの違いは、「レコード」が主キーでありint、 「」がでPART_NOあるということvarchar(100)です。

問題は、後で更新するためにレコードを識別するために「レコード」が必要なことです...

なぜ一方のフィールドを返し、もう一方のフィールドを返さないのか、本当にわかりません。

4

2 に答える 2

10

これは、「record」という名前のフィールドがないため、エイリアスを「CUSTOMER_NO」に変更したため、コードを次のように変更します。

lblWebMasterMessage.Text += "record " + reader["CUSTOMER_NO"].ToString() + "<br />";

そうは言っても、名前の代わりにインデックスを使用して、2番目の列を読み取ることもできます。

lblWebMasterMessage.Text += "record " + reader[1] + "<br />";
于 2013-02-21T15:04:50.850 に答える
2

私の場合、このエラーは、コマンドテキストで誤って2つのselectステートメントを実行していたことが原因でした。2つの別々の出力結果があり、最初の出力には読み取っていた列名が含まれていなかったため、エラーが発生しました。

于 2016-10-27T06:08:52.237 に答える