저장 프로 시저의 도움으로 Visual Studio 측에서 내 목록을 채우려고합니다. 나는 다음과 같은 저장 프로 시저를 사용하고범위 밖의 인덱스 예외
: 여기
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"];
:
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();
}
}
그러나이 행에 관해서 이 예외 :
Exception Details: System.IndexOutOfRangeException: CollectionType.Name
데이터베이스가 두 개 이상의 레코드에 있지만 범위를 벗어나는 인덱스입니다. 문제를 어떻게 해결할 수 있습니까?
내 저장 프로 시저에 chenges을해야하고 제대로 일이다 하지만 내 코드의 문제점을 이해할 수 없다. 왜 그렇게 작동 하는가? – Michael
원본 코드에서 동일한 이름의 두 열을 반환했습니다. SQL이 결과를 클라이언트에 반환하면 테이블과 열이 아닌 열의 이름 만 반환합니다. 모든 필드 이름을 반복한다면 "이름"의 두 인스턴스를 알 수 있습니다. 리더 [ "Name"]에 액세스하려면 첫 번째로 일치하는 열의 데이터 만 반환해야합니다. –
당신은 닉! – Michael