2014-07-07 4 views
-4

안녕하세요. 여기 C#의 코드 스 니펫입니다. asp.net에서 데이터의 요약을 생성하고 formview에 표시하려고합니다. 하지만이 코드를 생성하는 데 문제가있어서 'Incorrect syntax near 'K12'.' 도와주세요.쿼리 실행시 오류가 발생했습니다.

  try 
      { 
       SqlConnection conn = new SqlConnection("server=ARSLAN- LAPI\\SQLEXPRESS;" + 
           "Trusted_Connection=yes;" + 
           "database=OTTS; " + 
           "connection timeout=30"); 
       String query = "Select * FROM dbo."; 
       query = query + " " + "[" + session.SelectedItem.Text + "_" +  dept.SelectedItem.Text + "]"; 
       query = query + " " + "WHERE rollNo=" + "2K12-BSCS-37"; 
       //SqlCommand cmd = new SqlCommand(query, conn); 
       //SqlDataReader reader; 
       SqlDataAdapter dataAdapter = new SqlDataAdapter(query, conn); 
       SqlCommandBuilder commandBuilder = new SqlCommandBuilder(dataAdapter); 
       DataTable table = new DataTable(); 
       table.Locale = System.Globalization.CultureInfo.InvariantCulture; 
       dataAdapter.Fill(table); 
       dataform.DataSource = table; 
       dataform.Visible = true; 
      } 
      catch (SqlException ex) 
      { 
       ErrorMessage.Text="Error ::"+ ex.Message; 
      } 
+0

매우 위험한 코드입니다. 나는이 드롭 다운이 사용자로부터 쓰기가 가능하지 않기를 희망합니다. – Steve

+2

질문에 대한 몇 가지 문제점 : 1) 제목이 분명하지 않습니다. "C# 코드와 혼동을 느낀다"는 것은 인터넷에서 실제로 검색 할 사람이 아닙니다. 더 가까운 문제 제목은 "C#의 잘못된 구문 오류 (... * 당신이하려는 작업 * ...)"입니다. 2) 찾고있는 데이터베이스 스키마가 없습니다. 그래서 우리는 구문이 반드시 있어야하는지 알지 못합니다. –

+0

@Steve 최종 사용자는 양식 데이터로 원하는 형식을 가진 양식으로 HTTP 요청을 만들 수 있기 때문에 양식에서 사용할 수있는 경우가 가장 많습니다. OP는 값이 예상 한 범위 내에 있는지 확인하기 위해 일종의 유효성 검사를 수행해야합니다. –

답변

-1

where 절의 롤 번호 문자열은 문자열로 구분해야합니다. 이 줄 query = query + " " + "WHERE rollNo=" + "2K12-BSCS-37";query += " " + "WHERE rollNo=" + "'2K12-BSCS-37'";으로 바뀌어야합니다. 작은 따옴표에 유의하십시오.

더 나은 아직,이 같은 쿼리를 구축하는 문자열 형식을 사용하는 것입니다 :

string.Format("SELECT * FROM dbo.[{0}_{1}] WHERE rollNo = '{2}'", 
       session.SelectedItem.Text, 
       dept.SelectedItem.Text, 
       "2K12-BSCS-37") 

과 더 나은 여전히는 수많은로 데이터베이스를 노출하기 때문에, 모두 위험한 쿼리를 방지하는 것 가능한 공격. 나는 솔직히 사용자가이 방식으로 자신의 테이블 이름을 만들도록 내버려 두지 않으므로 SQLClient 매개 변수가 여기에서 작동하는지는 말할 수조차 없다. 나는 많은 범위 검사 등이 실행 가능하도록 요구 될 것이라는 이전 의견에 동의한다.

결국, 소수의 사용자 만 액세스 할 수있는 내부 응용 프로그램입니다.

+0

감사합니다 이제 오류가 제거되었습니다 그냥 asp.net –

+2

Ehm, 짧은 : 쿼리 + = "WHERE rollNo = '2K12-BSCS-37'" "의 formview 컨트롤에 데이터를 추가 할 수 있습니까? 그건 그렇고, StringBuilder는 그 목적에 더 적합합니다. 물론 쿼리에 값을 직접 연결하는 대신 "매개 변수가있는 쿼리"가 필요합니다. (나는 downvote하지 않았다.) –

관련 문제