2017-03-21 11 views
1

SqlDataReaderを使用してC#コードを作成して実行しているSQLクエリがあります。クエリは非常に簡単で、次の値になります。エイリアスを使用している場合のみ、SqlDataReader.get_Item()でSystem.IndexOutOfRangeExceptionが発生する

SELECT colName1 AS altColName1, colName2 AS altColName2 FROM table

SQL Server Management Studioでクエリを実行すると、期待どおりの結果が得られます。

また、私は単純なクエリを実行すると:SqlDataReaderのを使用して

SELECT colName1, colName2 FROM table

を、それは明らかに私は、エイリアスを取得しない以外、正常に動作します。

問題がSqlDataReaderのを使用し、それを最初のクエリを与えたときに、ですが、私は得る:

System.IndexOutOfRangeException -- colName1

、明らかにそのインデックスが添付エイリアスなしで正常に動作しますので、私は困惑です。私は何か間違っているのですか?または、エイリアスで動作するクエリを取得するために使用できる回避策がいくつかありますか?これが機能する理由を正確に私は理解していないのに

SELECT DISTINCT colName1 AS altColName1, colName2 AS altColName2 FROM table

、元はしませんでした:

編集:は、私はそれがにクエリを変更することにより、正常に動作するようになりました。

+0

あなたが何をしているのかをあなたが見せるまで間違っていると仮定するのは難しいです。 SqlDataReaderからデータを取得する場所にコードを表示します。 –

+0

System.IndexOutOfRangeExceptionをスローするC#コードを投稿できます。 – Balan

+0

@AndyKorneyevはい、私は実際のC#コードを取得できなかったことをお詫びします。クエリを構築するために使用するラッパーのヒープに埋め込まれていますが、最終的にはC#の 'System.Data.SqlClient'名前空間にある' SqlDataReader.get_Item() 'が呼び出されます。 –

答えて

3

colName1System.IndexOutOfRangeExceptionは、SELECTエイリアスを使用しているため、使用する正しい名前はaltColName1です。

したがって、SqlDataReader.get_Item()の列名を使用するかコードを変更する必要があります。

SqlDataReader.Itemプロパティは、指定された列の値を、その列の名前が与えられたネイティブ形式で取得します。あなたのコードでaltColName1と名前を変更した場合、yourSqlDataReader("colName1")のような呼び出しが見つからないことがあります。

+0

私はここでも少し混乱しています。なぜ私はSQL Server Management Studioでクエリを実行したときに 'colName1 AS altColName1'を使用し、それ以外の方法では動作しません。 –

関連する問題