2013-05-04 5 views
-1

제안 사항 중 일부를 시도했지만 여전히 같은 오류가 발생했습니다. SQL 구문에 오류가 있습니다. 당신은 공간을 놓친mySQL에서 테이블을 만들 때 오류가 발생했습니다.

  try{ 
      query = "CREATE TABLE @name (size int(5))"; 
      MySqlCommand cmd = new MySqlCommand(query, con); 


      cmd.Parameters.Add("@name", MySqlDbType.VarChar, 30).Value = txtboxName.Text; 

      con.Open(); 
      cmd.ExecuteNonQuery(); 
      con.Close(); 
      } 
      catch (Exception) 
     { 
      throw; 
     } 
     finally 
     { 
      if (con.State == ConnectionState.Open) 
      { 
       con.Close(); 
      } 
     } 

답변

0

: 1 호선 여기

에서 '(크기 INT (5))'근처 ''를 사용할 수있는 권리 구문에 대한 MySQL 서버 버전에 해당하는 설명서를 확인하는 것은 내 코드입니다 테이블 이름과 열 정의 사이

sql injection ... 인라인 매개 변수를 사용하지 마십시오. 아래는 내가 아는 모범 사례가 거의없는 샘플 코드입니다. 그러나 테이블 이름에는 매개 변수를 사용할 수 없습니다.

public void CreateTable(string tblName) 
{ 
    using (var con = new MySqlConnection(MySqlConnectionString)) 
    { 
     using (var cmd = new MySqlCommand(String.Format("CREATE TABLE {0} (size int(5))",tblName), con) 
     { 
      con.Open(); 
      cmd.ExecuteNonQuery(); 
     } 
    } 
} 
+0

내 코드베이스를 제안했지만 동일한 오류로 편집했습니다. 왜 그런가요? – Harvey

+0

@ user2083771 유감스럽게도 매개 변수는 테이블 이름으로 사용할 수 없습니다. 내 업데이트를 확인하십시오 – Damith

0

당신이 백 테이블을 사용하여 테이블 이름을 이스케이프 처리하려고했지만 대신 작은 따옴표를 사용했다고 생각합니다.

query = "CREATE TABLE `"+ txtboxName.Text + "`(size int(5))"; 
+0

아니요, 작은 따옴표를 사용하지 않습니다. – Harvey

0

txtboxName.Text에 이스케이프 시퀀스를 추가하려고합니다. SQL 문을 깨뜨리는 특수 문자가있을 수 있습니다.

관련 문제