0

我一直在尝试将特定数据插入我的数据库(在我的情况下是 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 语句中的语法错误。

4

3 回答 3

3

User保留关键字。将括号括起来以指定您要将其用作标识符,而不是命令:

string sql = "Insert into Orders([User],PID,PName,Price,Amount)" +
         " values('" + od.User + "','" + od.Pid + "','" + 
         od.Pname + "','" + od.Price + "','" + od.Amount + "')";

这应该可以解决您的直接问题。使用参数化查询(正如一些人建议的那样)也可以很好地避免未来的问题。

于 2013-02-13T18:13:18.963 回答
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 注入攻击,又防止了未转义字符的错误。

于 2013-02-13T18:11:18.293 回答
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();
        }
    }
于 2013-02-13T18:43:11.460 回答