在这里,我对存储过程感到困惑。在这里,我们将所有与数据库相关的操作应用到代码中:
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);
我们可以在存储过程中应用它吗?如果是这样:如何?与它相比,存储过程有什么优势?
MVVM 与您的 SQL 问题无关。
基本上,您不应该将值串在一起到SQL表达式中,因为它允许最终用户注入SQL代码。真是个坏主意。
存储过程使您可以更好地控制参数并避免注入攻击。它还允许您进行细微的更改,例如,如果数据库略有更改,而无需更改调用的 C# 代码。
不幸的是,SQLite 似乎不支持存储过程,因此您可能需要改变您的方法。看看这个链接: http://www.sqlite.org/whentouse.html
如果你必须坚持使用 SQLite,而不是说 SQL CE,你将需要向代码添加验证检查,以确保不插入 SQL 语句。
- 您应该检查 sql 中插入中的值以避免SQL注入。
- 数据访问代码不应位于视图模型中。它应该在模型中。