2013-05-04 93 views
-1

我嘗試了一些建議,但仍然出現相同的錯誤。 你的SQL語法有錯誤;檢查對應於你的MySQL服務器版本在1號線在mySQL中創建表時出錯

這裏使用近「」「(大小INT(5))」正確的語法手冊是我的代碼:

  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

你錯過空間表名和列定義之間

query = "CREATE TABLE "+ txtboxName.Text + " (size int(5))"; 
              | 
              put space here 

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 2013-05-04 09:52:36

+0

@ user2083771不幸的是參數不能用於表名。檢查我的更新 – Damith 2013-05-04 10:08:47

0

我想你打算使用反引號``逃脫表的名字,但用單引號代替。

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

不,我使用單引號不反引號。 – Harvey 2013-05-04 09:16:32

0

我會嘗試將轉義序列添加到txtboxName.Text。可能有一些特殊字符會破壞你的SQL語句。