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

ここにあなたが従うことができる例があります 私はちょうど私が書いたもののコピーを貼り付けました 将来の参照のためにこれに従うことをお勧めします 値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 に答える
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 に答える