在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();
}
}
}
答
我想你打算使用反引号``逃脱表的名字,但用单引号代替。
query = "CREATE TABLE `"+ txtboxName.Text + "`(size int(5))";
+0
不,我使用单引号不反引号。 – Harvey 2013-05-04 09:16:32
答
我会尝试将转义序列添加到txtboxName.Text
。可能有一些特殊字符会破坏你的SQL语句。
我编辑我的代码基于您的建议,但同样的错误。这是为什么? – Harvey 2013-05-04 09:52:36
@ user2083771不幸的是参数不能用于表名。检查我的更新 – Damith 2013-05-04 10:08:47