2012-12-31 4 views
3

간단한 로그인 페이지가 있습니다. 내가하고 싶은 일은 로그인이 올 바르며 모든 열을 표시하고 싶습니다. while 루프에 표시 할 열을 수동으로 지정하고 싶지는 않습니다.열을 지정하지 않고 데이터베이스의 데이터 표시

private void Authenticate(string userName, string password) 
{ 
    string connString = "server=.\\sqlexpress; database=TestDatabase; trusted_connection=true"; 
    SqlConnection conn = new SqlConnection(connString); 
    conn.Open(); 

    string sqlCommand = "select * from Registration where UserName='" + userName + "' and Password='" + password + "'"; 
    SqlCommand command = conn.CreateCommand(); 
    command.CommandText = sqlCommand; 

    SqlDataReader reader = command.ExecuteReader();   

    while (reader.Read()) 
    { 
     lblResult.Text += reader["CourseId"] + " " + reader["CourseName"] + " " + reader["Instructor"] + "<br />"; 
    } 

}

나는 이것이 최선의 구현 아니라는 것을 알고 :

에서는 SQL Server 2008 Express를 사용하여 C#에서 내가 가진 샘플입니다.

등록 테이블에서 반환되는 모든 항목으로 lblResult를 어떻게 채울 수 있습니까?

+0

LINQ + DataSource? – Christian

+0

당신은 서수 위치 – MethodMan

+1

에 의해 독자 []에 액세스 할 수 있습니다. 여기서 UserName = ' "+ userName +"'--- 정말요 ?? Google SqlParameters –

답변

4
StringBuilder sb = new StringBuilder(1024); /* arbitrary size */ 
while (reader.read()) 
{ 
    for (int i = 0; i < reader.FieldCount; i++) 
    { 
     sb.Append(reader.GetName(i)); 
     sb.Append(": "); 
     sb.Append(reader[i]); 
    } 
    sb.Append("<br />"); 
} 
lblResult.Text = sb.ToString(); 

뭔가의 MSDN docs에 따라.

+2

+1은'.GetName()'을 포함합니다. –

3

SqlDataReader에는 반환되는 필드의 수를 알려주는 FieldCount이라는 속성이 있습니다. 그런 다음 지식이있는 항목 인덱스를 반복하면됩니다. 또한 성능 향상을 위해 문자열을 연결하는 대신 결과 문자열을 작성하는 데 StringBuilder을 사용합니다. 이런 식으로 뭔가 : 그런

var str = new StringBuilder() 
while (reader.Read()) 
{ 
    for(int i=0; i<reader.FieldCount ; i++) 
    { 
     str.Append(reader[i].ToString()); 
     str.Append(" "); 
    } 
    str.Append("<br/>");  
} 
lblResult.Text = str.ToString(); 
관련 문제