2012-03-21 5 views
0

안녕하세요.ASP.net의 데이터베이스에서 값을 가져올 수 없습니다.

이 코드가 있는데 내 쿼리 결과를 제 3 텍스트 상자에 표시하고 싶지만 표시하지 않습니다.

string query = "SELECT UserID FROM [IBSI].[sec].[Users] WHERE UserName = '" + TextBox2.Text + "'"; 

if (query != null) 
{ 
    using (SqlConnection conn = new SqlConnection(connect)) 
    { 
    using (SqlCommand cmd = new SqlCommand(query, conn)) 
    { 

     conn.Open(); 
     SqlDataReader rdr = cmd.ExecuteReader(); 
     if (rdr.HasRows) 
     { 
     while (rdr.Read()) 
     { 

     TextBox3.Text=rdr["UserID"].ToString() ; 


     } 
     } 
    } 
    } 
} 

하지만이 조건을 사용하지 않으면 조건을 출력 할 수 있습니다. 사전에

string query = "SELECT UserID FROM [IBSI].[sec].[Users]"; 

감사

+0

당신이 결과를 얻는 경우도 만 한 결과를 반환하기 때문에, 참조, SQL 관리자 textbox2.text의 값을 가진 필터를 포함하는 쿼리를 실행, ExecuteScalar()는 매개 변수화 된 쿼리를 권장하는 데 ExecuteReader() –

답변

2

나는이 작업을 위해 매개 변수화 된 쿼리를 사용하는 것이 좋습니다 것입니다. 또한 사용자 입력 (예 : 텍스트 상자/메모)에서 sql 코드를 생성하는 것은 SQL 주입 (사용자가 데이터베이스 데이터를 손상시킬 수있는 텍스트 상자에 SQL 코드를 입력 할 수 있음)가 발생하기 쉽기 때문에 입력 데이터의 유효성을 검사하는 것이 좋습니다.

샘플 매개 변수 사용은 다음과 같이이다 :

string query = "SELECT UserID FROM [IBSI].[sec].[Users] WHERE UserName = @1"; 
if (query != null) 
{ 
    using (SqlConnection conn = new SqlConnection(connect)) 
    { 
     using (SqlCommand cmd = new SqlCommand(query, conn)) 
     { 
      SqlParameter p1 = new SqlParameter("@1", TextBox2.Text); 
      cmd.Parameters.Add(p1); 
      conn.Open(); 
      SqlDataReader rdr = cmd.ExecuteReader(); 
      if (rdr.HasRows) 
      { 
       while (rdr.Read()) 
       { 
        TextBox3.Text=rdr["UserID"].ToString() ; 
       } 
      } 
     } 
    } 
} 
+0

+1보다 우수한 함수입니다. 하지만 ** 명확하고 명백한 ** 매개 변수 이름을 사용하는 것이 좋습니다 -'@ 1 '대신'@ UserName'을 사용하십시오 - 훨씬 명확하게 - 특히 하나가 아니라 20 개 또는 30 개의 매개 변수가있는 경우 특히 그렇습니다! –

+1

감사합니다. 사실, 어리 석다. :) –

0

디버거를 통해 단계 및 쿼리 결과를 반환되어 있는지 확인합니다. 코드에서

0

어이 버트 변화를 다음과 같이

string query = "SELECT UserID FROM [IBSI].[sec].[Users] WHERE UserName= '"+TextBox2.Text+ "'";  

if (query != null)  
{  
    using (SqlConnection conn = new SqlConnection(connect))  
    {  
    using (SqlCommand cmd = new SqlCommand(query, conn))  
    { 
     conn.Open();  
     int UserId; 
     UserId=Convert.ToInt32(cmd.ExecuteScalar()); 
     TextBox3.Text=UserId.ToString() ;   
    }  
    }  
}  
관련 문제