0

私は Access データベースを使用しています。ユーザー テーブルがあります。

挿入クエリがあります:

DataBase.Execute("Insert into Users(UserID,FirstName,SecondName,UserName,Password,Permission) Values(" +
    obj.PersonID +
    ",'" + obj.FirstName +
    "','" + obj.LastName +
    "','" + username +
    "','" + psw +
    "'," + permission + ")");

すべてのパラメーターの値がテーブルの値と同じであることを確認しましたが、INSERT クエリに構文エラーがあると表示されます。

4

1 に答える 1

0

パラメータ、パラメータ、パラメータ。コードの最初の利点は、一重引用符を忘れることです。次に、恐ろしい SQL インジェクションの脆弱性を回避します。第三に、コードが読みやすくなります。このことを考慮:

string insertQuery = "INSERT INTO table (field1, field2, field3) VALUES (@par1, @par2, @par3)";
Database.Execute(insertQuery, var1, var2, var3);

ここで、var1var2、およびvar3は、挿入する必要がある値を含む変数です。

投稿した例よりもコードをはるかに読みやすくする、より単純な (ただし、SQL インジェクションに対して脆弱であるため、さらに悪い) ソリューションがあります: string.format. これの代わりに:

DataBase.Execute("Insert into Users(UserID,FirstName,SecondName,UserName,Password,Permission) Values(" +
obj.PersonID +
",'" + obj.FirstName +
"','" + obj.LastName +
"','" + username +
"','" + psw +
"'," + permission + ")");

あなたはこのようなことをすることができます.

string query = string.Format("Insert into Users (UserID,FirstName,SecondName,UserName,Password,Permission) Values({0}, '{1}', '{2}', '{3}', '{4}', {5})", obj.PersonID, obj.FirstName, obj.LastName, username, psw, permission);
Database.Execute(query);

これを、挿入のためのパラメーターの使用法の簡単な例と考えてください: http://msdn.microsoft.com/en-us/library/webmatrix.data.database.execute(v=vs.111).aspx

于 2013-04-01T11:23:11.773 に答える