编辑:为这个愚蠢的问题道歉。我自己的注意力集中,加上我还在学习SQL语法的事实让我错过了这个问题。
原始问题:我不知道这里发生了什么。我已经尝试了几种插入数据的方法,但到目前为止还没有工作,我总是得到同样的例外。我不确定是什么导致了这个问题。我错过了命令功能还是语法有问题?
string uName = "tess";
string uPwd = "newpassword";
int authorityLevel = 3;
try
{
mySqlCommand = mySqlConnect.CreateCommand();
mySqlCommand.CommandText = "INSERT INTO Users(UserName, UserPassword, AuthorityLevel) VALUES(\"" + uName + "\", \"" + uPwd + "\", " + authorityLevel + ";";
mySqlCommand.ExecuteNonQuery();
}
catch ((MySql.Data.MySqlClient.MySqlException e)
{
Console.WriteLine(e.Message);
}
// Output:
// You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
答案 0 :(得分:2)
你忘了关闭角括号)
mySqlCommand.CommandText = "INSERT INTO Users(UserName, UserPassword, AuthorityLevel) VALUES(\"" + uName + "\", \"" + uPwd + "\", " + authorityLevel + ";";
用此
替换它mySqlCommand.CommandText = "INSERT INTO Users(UserName, UserPassword, AuthorityLevel) VALUES(\"" + uName + "\", \"" + uPwd + "\", " + authorityLevel + ");";
你添加了一个额外的开口角括号(在
catch ((MySql.Data.MySqlClient.MySqlException e)
用
替换它catch (MySql.Data.MySqlClient.MySqlException e)
答案 1 :(得分:1)
我不能说C#
,但你的MySQL插入语法应该是,如果所有列都是字符串类型
INSERT INTO Users(UserName, UserPassword, AuthorityLevel) VALUES('username','password','superadmin')
答案 2 :(得分:1)
您的问题很简单:您在查询结束时遗漏了)
。
请尝试使用此代码:
mySqlCommand.CommandText = "INSERT INTO Users(UserName, UserPassword, AuthorityLevel) VALUES('" + uName + "', '" + uPwd + "', '" + authorityLevel + "');";
注意,最后一个参数也缺少引号,我将它们更改为单引号。
另一个语法错误就在你的标语处:
catch ((MySql.Data.MySqlClient.MySqlException e)
你有两个左括号 - 删除其中一个。
此外,您必须关心SQL注入。如果用户在您的姓名字段中输入此字符串,该怎么办:username'; DROP DATABASE; --
?它会丢弃你的数据库吗?
您应该使用string-escape-functions。或 - 甚至更好 - 使用准备好的Statement。 Selman22的回答为您提供了一个如何在C#中做到这一点的例子。
答案 3 :(得分:1)
你缺少了
mySqlCommand.CommandText = "INSERT INTO Users(UserName, UserPassword, AuthorityLevel) VALUES(\"" + uName + "\", \"" + uPwd + "\", " + authorityLevel + ");";
使用参数化查询,否则您将拥有SQL injection Attack
像这样的东西
String strQuery = "insert into customers (UserName, UserPassword, AuthorityLevel) VALUES(@name,@password,@authorityLevel)"
SqlCommand cmd = new SqlCommand(strQuery);
cmd.Parameters.AddWithValue("@name", UserName);
cmd.Parameters.AddWithValue("@password", password);
答案 4 :(得分:1)
使用parameterized queries
。它使您的代码更加可读和安全来防止SQL注入攻击:
mySqlCommand.CommandText = "INSERT INTO Users(UserName, UserPassword, AuthorityLevel) VALUES(@name,@pw,@authorityLevel)";
mySqlCommand.Parameters.AddWithValue("@name", uName);
mySqlCommand.Parameters.AddWithValue("@pw", uPwd);
mySqlCommand.Parameters.AddWithValue("@authorityLevel", authorityLevel);