私はストアドプロシージャの助けを借りてVisual Studio側で私のリストを記入しようとしています。範囲外のインデックス例外
私は次のストアドプロシージャを使用しています:
protected void Button1_Click(object sender, EventArgs e)
{
List<GlassesCollection> list = new List<GlassesCollection>();
using (SqlConnection conn = new SqlConnection("Server=(local);DataBase=ISeeOptic;Integrated Security=SSPI"))
{
GlassesCollection gln = new GlassesCollection();
SqlCommand cmd = new SqlCommand();
SqlDataReader reader;
cmd.Connection = conn;
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "GetColletcion";
conn.Open();
reader = cmd.ExecuteReader();
while (reader.Read())
{
gln.Name = (string)reader["CollectionType.Name"];
gln.CollectionType = (string)reader["GlassesCollection.Name"];
list.Add(gln);
}
reader.Close();
conn.Close();
}
}
しかし、それは、この行に来る:
CREATE PROCEDURE [dbo].[GetColletcion]
AS
BEGIN
select CollectionType.Name ,GlassesCollection.Name
from GlassesCollection
inner join CollectionType
on GlassesCollection.CollectionType=CollectionType.CollTypeID
END
は、ここでは、コードビハインドだ
gln.Name = (string)reader["CollectionType.Name"];
私が手この例外:
Exception Details: System.IndexOutOfRangeException: CollectionType.Name
範囲外のインデックスですが、複数のレコードにデータベースがあります。 問題をどのように解決できますか?
を私は、ストアドプロシージャにchengesを作成してもらって、それが正常に動作しますしかし、私のコードで何が問題になっているのか理解できません。 – Michael
元のコードでは、同じ名前の2つの列を返していました。 SQLは結果をクライアントに返すときには、テーブルとカラムではなく、カラムの名前だけを返します。すべてのフィールド名をループする場合は、「名前」という2つのインスタンスがあります。読者["Name"]にアクセスした場合、一致する最初の列のデータのみが返されます。 –
あなたはニック! – Michael