2011-04-26 3 views
21

다음 명령을 실행하고 결과를 레이블로 전달해야합니다. 리더를 사용하여 어떻게 할 수 있는지 모르겠습니다. 누군가 나에게 손을 줄 수 있니?executeReader() 메서드를 사용하여 하나의 셀 값을 가져 오는 방법

String sql = "SELECT * FROM learer WHERE learer.id = " + index; 
SqlCommand cmd = new SqlCommand(sql,conn); 
learerLabel.Text = (String) cmd.ExecuteReader(); 

나는 알 수 있듯이 SQL 문을 만들고 실행하지만 작동하지 않습니다. 왜?

콘솔은 말한다 : 레이블이 제대로 표시 할 수 있도록

어떻게 내가 문자열로 원하는 결과를 얻을 수 있습니다

수 없습니다 암시 적으로 SqlDataReader를 ... 문자열 에.

+0

귀하의 코드가 SQL 인젝션 –

+0

([C#에서 SELECT COUNT (\ *)를 사용]의 중복 가능성 http://stackoverflow.com/questions/5701910/using-에 취약 필요하다 select-count-in-c-sharp) –

답변

18

단지 데이터베이스에서 값을 얻을 DataReaderCommand.ExecuteReader를 사용하지 않는 것이 좋습니다. 다음과 같은 대신 Command.ExecuteScalar을 사용해야합니다

String sql = "SELECT ColumnNumber FROM learer WHERE learer.id = " + index; 
SqlCommand cmd = new SqlCommand(sql,conn); 
learerLabel.Text = (String) cmd.ExecuteScalar(); 

Here 데이터베이스에 연결하고 데이터를 관리하는 방법에 대한 자세한 내용입니다.

36
using (var conn = new SqlConnection(SomeConnectionString)) 
using (var cmd = conn.CreateCommand()) 
{ 
    conn.Open(); 
    cmd.CommandText = "SELECT * FROM learer WHERE id = @id"; 
    cmd.Parameters.AddWithValue("@id", index); 
    using (var reader = cmd.ExecuteReader()) 
    { 
     if (reader.Read()) 
     { 
      learerLabel.Text = reader.GetString(reader.GetOrdinal("somecolumn")) 
     } 
    } 
} 
+0

"reader.GetString (reader.GetOrdinal ("somecolumn "))"은 텍스트 값을 검색하는 가장 쉬운 방법입니까? reader.fieldByName ("Name"). asString과 같은 것은 어디에도 없습니다. – Rebelss

+1

Scalar가 아닌 ExecuteReader()를 사용하는 방법을 보여 주셔서 감사합니다. – AlbatrossCafe

+0

쪽지에는 변수 이름만으로는 테이블 이름을 사용할 수 없습니다. – Robot70

2

ExecuteScalar() 당신이 여기

관련 문제