2017-12-30 16 views
-4

이 코드를 실행하면이 오류를 해결하는 데 도움이됩니다. '='근처의 구문이 잘못되었습니다.'='근처에 잘못된 구문이 있습니다.

어떤 종류의 오류입니까?

namespace SqlCommandBuilders 
{ 
    public partial class WebForm1: System.Web.UI.Page 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 
      String CS = ConfigurationManager.ConnectionStrings["DBCS"].ConnectionString; 
      SqlConnection con = new SqlConnection(CS); 
      string sqlQuery = "Select * from tblStudents where ID = "+txtStudentID.Text; 
      SqlDataAdapter da = new SqlDataAdapter(sqlQuery, con); 
      DataSet ds = new DataSet(); 
      da.Fill(ds, "Students"); 

      ViewState["SQL_QUERY"] = sqlQuery; 
      ViewState["DATASET"] = ds; 

      if(ds.Tables["Students"].Rows.Count > 0) 
      { 
       DataRow dr = ds.Tables["Students"].Rows[0]; 
       txtStudentID.Text = dr["Name"].ToString(); 
       txtTotalMarks.Text = dr["TotalMarks"].ToString(); 
       ddlGender.SelectedValue = dr["Gender"].ToString(); 
      } 
      else 
      { 
       lblStatus.ForeColor= System.Drawing.Color.Red; 
       lblStatus.Text = "No Student Record with ID =" + txtStudentID.Text; 
      } 

     } 
    } 
} 
+0

오류가 발생한 행을 표시하십시오. 전체 오류/예외 세부 사항을 게시하십시오. –

답변

-3

SQL 인젝션으로 이어질 수 있으므로 실제로는 실행해서는 안됩니다. 아래 쿼리는 오류를 제거해야합니다.

SQL 문을 이렇게 변경하십시오.

string sqlQuery = "Select * from tblStudents where ID = '"+txtStudentID.Text"'"; 

이상적인 구문은 다음과 같아야합니다

sqlCommand.CommandText = "Select * from tblStudents where ID = @text;"; 
sqlCommand.Parameters.AddWithValue("@text",txtStudentID.Text); 
+2

[** 아니, 절대로하지 마십시오. **] (http://bobby-tables.com/) –

+1

Downvoters는 자신의 행동을 설명해야합니다. –

+0

@ T.J.Crowder 여기에서 오류를 해결하고 있습니다. SQL 주입 예방을 제안하는 것은이 질문의 범위가 아닙니다. Questioner는 SqlParameters를 사용하여 SQL 삽입을 피할 수 있습니다. –

1

SQL은 사용자가 사용할 텍스트 입력은 거의 항상 SQL 주입 공격 및 구문 오류를 방지하기 위해 매개 변수화 된 쿼리를 사용하도록 명령하고, 얻을 것도 좋은

DataSet ds = new DataSet(); 
using(SqlConnection con = new SqlConnection(CS)) { 
    string sqlQuery = "Select * from tblStudents where ID = @studentId"; 
    using(SqlDataAdapter da = new SqlDataAdapter(sqlQuery, con)) { 
     da.SelectCommand.Parameters.Add("@studentId", SqlDbType.VarChar) 
            .Value = txtStudentID.Text; 
     da.Fill(ds, "Students"); 
    } 
} 
3

티 : using 문에서 (데이터베이스 연결 등) 일회용 객체를 포장하는 습관에서 당신이 잠시 동안 만들고있는 문자열에 대해 nk. 이 txtStudentID.Text이라고 가정합니다. 분명히 정확하지 않은 Select * from tblStudents where ID = Joe을 만들 것입니다. Joe 주위에 따옴표가 필요합니다.

그러나 주위에 따옴표를 넣지 마십시오. Here's why :

enter image description here

here 위의 링크 된 사이트에 설명 된대로, 매개 변수가있는 SQL 문을 사용한다 할 올바른 것. 코드에 자신의 예를 적용, 우리는 같은 것을 얻을 것이다 :

SqlCommand sqlQuery = new SqlCommand("Select * from tblStudents where ID = @username", con); 
sqlQuery.Parameters.AddWithValue("@username", txtStudentID.Text); 

을 ...하지만 난 당신의 ViewState 일이 무엇인지 모르는, 그래서 당신이 그것을 적용 도울 수 없어요.

0

여기 몇 가지.

이와 같은 경우에는 SQL 매개 변수를 사용해야합니다.

또한 학생 ID는 데이터베이스의 텍스트 필드 또는 숫자입니까?

숫자 인 경우 초기화되는 텍스트 상자는 어디에 있습니까? page_load는 일어나는 첫 번째 일 중 하나이며, 모든 page_loads (처음이라도)에서이 작업을 실행하고 있으므로 빈 문자열 인 경우 매개 변수 사용 여부와 관계없이 확실히 충돌합니다. 빈 문자열을 숫자로 변환 할 수 없습니다.