我的代码:
string MySQL = "INSERT INTO RegisterDatabase (uName, pName, idNumber, age, pass, e-mail) ";
MySQL += "VALUES ('" + Request.Form["username"] + "', '" + Request.Form["fname"] + "', '" + Request.Form["id"] + "', '" + Request.Form["age"] + "', '" + Request.Form["pass"] + "', '" + Request.Form["email"] + "');";
string strConnection = "Provider='Microsoft.ACE.OLEDB.12.0';Data Source=" + System.Web.HttpContext.Current.Server.MapPath(@"App_Data/RegisterDatabase.accdb");
System.Data.OleDb.OleDbConnection o_con = new System.Data.OleDb.OleDbConnection(strConnection);
System.Data.OleDb.OleDbCommand o_command = new System.Data.OleDb.OleDbCommand(MySQL, o_con);
o_con.Open();
o_command.ExecuteNonQuery();
o_con.Close();
我得到了
INSERT INTO语句中的语法错误“in o_command.ExecuteNonQuery(); 并且用户代码没有使用OleDbException。
以下是大部分内容的图片: https://i.gyazo.com/d6c30ee3f9988d5d22793540aea98a6c.png
答案 0 :(得分:0)
发现问题:
使用Access执行查询时,它给了我同样的错误,因此我删除了电子邮件中的“ - ”并且它有效。
使用访问权限时,请确保在字段名称中不使用特殊字符。
答案 1 :(得分:0)
'
,你的代码就会失败(硬)的一个原因。如果你定位像Sql Server这样的数据库,你也容易受到SQL注入攻击。using
块中包装您的dipsosable类型,以确保即使出现异常,资源(在这种情况下 db连接)也会关闭。web.config
中存储连接字符串并按名称引用它们,除非有充分的理由,否则不要在代码中构建它们。pbkdf2
(其中一个好的)并稍后比较哈希值。现在主要问题是"INSERT INTO RegisterDatabase (uName, pName, idNumber, age, pass, e-mail)
,特别是e-mail
。您需要使用[]
来转义该名称以将其括起来以确保-
字符不会导致语法问题。更正后的字符串变为:
INSERT INTO RegisterDatabase (uName, pName, idNumber, age, pass, [e-mail])
以下是包含这些更改的代码。我猜测了id和age的类型,并将它们作为那些类型传递。如你所愿,进一步细化。
string strConnection = System.Configuration.ConfigurationManager.ConnectionStrings["yourConnectionName"].ConnectionString;
using (OleDbConnection con = new OleDbConnection(strConnection))
using (OleDbCommand cmd = new OleDbCommand())
{
cmd.Connection = con;
cmd.CommandType = CommandType.Text;
cmd.CommandText = "INSERT INTO RegisterDatabase (uName, pName, idNumber, age, pass, [e-mail]) VALUES(?,?,?,?,?,?)";
cmd.Parameters.Add(new OleDbParameter("@uName", OleDbType.VarChar)).Value = Request.Form["username"];
cmd.Parameters.Add(new OleDbParameter("@pName", OleDbType.VarChar)).Value = Request.Form["fname"];
cmd.Parameters.Add(new OleDbParameter("@idNumber", OleDbType.Int)).Value = int.Parse(Request.Form["id"]);
cmd.Parameters.Add(new OleDbParameter("@age", OleDbType.Int)).Value = int.Parse(Request.Form["age"]);
cmd.Parameters.Add(new OleDbParameter("@pass", OleDbType.VarChar)).Value = Request.Form["pass"];
cmd.Parameters.Add(new OleDbParameter("@email", OleDbType.VarChar)).Value = Request.Form["email"];
con.Open();
cmd.ExecuteNonQuery();
}