在这里,我对存储过程感到困惑。在这里,我们将所有与数据库相关的操作应用到代码中:
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);
我们可以在存储过程中应用它吗?如果是这样:怎么样?存储过程有什么优势呢?
答案 0 :(得分:3)
MVVM与您的SQL问题无关。
基本上,您不应将值串联到SQL表达式中,因为它允许最终用户注入SQL代码。即。 非常糟糕的主意。
存储过程可让您更好地控制参数并避免注入攻击。它还允许您进行细微的更改,例如如果数据库略有变化,而不更改调用的C#代码。
不幸的是,似乎SQLite不支持存储过程,因此您可能希望改变您的方法。请看一下这个链接:http://www.sqlite.org/whentouse.html
如果您必须坚持使用SQLite,而不是说SQL CE,则需要在代码中添加验证检查以确保不插入SQL语句。
答案 1 :(得分:0)