0

次のエラーが表示されます

項目番号付近の構文が正しくありません

挿入される値は、ループされて別のテーブルに挿入される別のSQLクエリの変数にフィールド名を含むデータセットからのものです....

string strOrderDetails = 
    "INSERT INTO Orders (Order Number, Item Number, Description, Price) " +
    "VALUES ('" + strOrderNo.Replace("'", "''").ToString() + "', '"
             + intItemNo + "', '"
             + strDesc.Replace("'", "''").ToString() + "', '"
             + decPrice + "')";

上記を実行すると、コードがフォールオーバーし、単語項目番号の近くにエラーがあると表示されますか?

intItemNo整数なので、何かをする必要がありますか?

4

1 に答える 1

4

列にスペースが含まれている場合は、選択したデータベースの角括弧またはその他の区切り文字で囲む必要があります

ただし、文字列連結を使用してSQLコマンドを作成しないでください。常にパラメータ化されたクエリを使用してください。

string strOrderDetails = "INSERT INTO Orders ([Order Number], [Item Number]," + 
                         "Description, Price) VALUES (@ordNum, @temNo, @desc, @price";
using(SqlConnection cn = new SqlConnection(conString))
using(SqlCommand cmd = new SqlCommand(strOrderDetails, cn))
{
    cn.Open();
    cmd.Parameters.AddWithValue("@ordNum",strOrderNo);
    cmd.Parameters.AddWithValue("@itemNo",intItemNo);
    cmd.Parameters.AddWithValue("@desc",strDesc);
    cmd.Parameters.AddWithValue("@price", decPrice);
    cmd.ExecuteNonQuery();
}

お気づきのように、パラメーターを使用すると、入力値の引用符を処理するコードを記述する必要がなくなりますが、SQL インジェクション攻撃の可能性もなくなります。

于 2013-07-15T22:05:09.857 に答える