0

ここで、ストアドプロシージャについて混乱しています。ここでは、すべてのデータベース関連の操作をコードに適用します。

string query = "insert into accounts(name, opening_balance, category, address, contact_person, phone_number) values("
                                + "'" + account.Name + "',"
                                + account.OpeningBalance + ","
                                + account.Category.Id + ","
                                + "'" + account.Address + "',"
                                + "'" + account.ContactPerson + "',"
                                + "'" + account.PhoneNumber + "')";
            account.Id = SQLiteHelper.ExecuteInsert(query);

ストアドプロシージャに適用できますか? もしそうなら:どのように?それに対するストアドプロシージャの利点は何ですか?

4

2 に答える 2

3

MVVMはSQLの質問とは何の関係もありません。

基本的に、エンドユーザーによるSQLコードの挿入を可能にするため、SQL式に値をつなぎ合わせてはなりません。すなわち。本当に悪い考え

ストアドプロシージャを使用すると、パラメータをより細かく制御でき、インジェクション攻撃を回避できます。また、呼び出し元のC#コードを変更せずに、データベースがわずかに変更された場合など、微妙な変更を加えることもできます。

残念ながら、SQLiteはストアプロシージャをサポートしていないようです。そのため、アプローチを変えることをお勧めします。このリンクを見てください:http ://www.sqlite.org/whentouse.html

SQL CEとは言わずに、SQLiteに固執する必要がある場合は、SQLステートメントが挿入されていないことを確認するために、コードに検証チェックを追加する必要があります。

于 2012-05-18T09:24:50.617 に答える
0
  1. SQL インジェクションを避けるために、SQL の挿入の値を確認する必要があります。
  2. ビューモデルにデータ アクセス コードを含めないでください。それはモデルにあるはずです。
于 2012-05-18T10:08:33.767 に答える