我一直在尝试将特定数据插入我的数据库(在我的情况下是Microsoft Access), 这是我用c#编写的以下代码:
string sql = "Insert into Orders(User,PID,PName,Price,Amount)" +
" values('" + od.User + "','" + od.Pid + "','" +
od.Pname + "','" + od.Price + "','" + od.Amount + "')";
现在我假设我写的形式完全没问题,不是吗? 我得到的错误是:
INSERT INTO语句中的语法错误。
答案 0 :(得分:3)
User
是reserved keyword。在其周围放置括号以指定您要将其用作标识符,而不是命令:
string sql = "Insert into Orders([User],PID,PName,Price,Amount)" +
" values('" + od.User + "','" + od.Pid + "','" +
od.Pname + "','" + od.Price + "','" + od.Amount + "')";
这可以解决您的直接问题。使用参数化查询(正如几个人建议的那样)也可以避免将来出现问题。
答案 1 :(得分:1)
更改您的代码,以便使用参数化命令:
string sql = "Insert into Orders([User],PID,PName,Price,Amount) values(@user, @pid, @pname, @price, @amount)";
..here you will need to add your parameters to your command
这既可以避免SQL注入攻击,也可以防止非转义字符出错。
答案 2 :(得分:1)
这是一个你可以遵循的例子我已经粘贴了我刚才写的东西的副本
您可能希望关注此以供将来参考,请注意如何使用Parameters.AddWithValue()
方法而不是使用Quoted
值构建字符串查询字符串
private void btnInsert_Click(object sender, EventArgs e)
{
using(SqlConnection con = new SqlConnection(connString))
{
con.Open();
string Sql = "INSERT INTO Uyeleri (dID, FullName, Address, Mobile, Email, Comments ) " +
"VALUES (@id, @name, @address, @mobile, @email, @comments");
using(SqlCommand cmd = new SqlCommand(Sql, con))
{
cmd.Parameters.AddWithValue("@id", txtdID.Text);
cmd.Parameters.AddWithValue("@name", txtAdiSoyadi.Text);
cmd.Parameters.AddWithValue("@address", txtAddress.Text);
cmd.Parameters.AddWithValue("@mobile", txtMobile.Text);
cmd.Parameters.AddWithValue("@email", txtEmail.Text);
cmd.Parameters.AddWithValue("@comments", txtComments.Text);
cmd.ExecuteNonQuery();
}
}