在mySQL中创建表时出错

问题描述:

我尝试了一些建议,但仍然出现相同的错误。 你的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(); 
      } 
     } 

你错过空间表名和列定义之间

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

我想你打算使用反引号``逃脱表的名字,但用单引号代替。

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

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

我会尝试将转义序列添加到txtboxName.Text。可能有一些特殊字符会破坏你的SQL语句。