我们可以在 mvvm 中应用存储过程吗?用理由解释



在这里,我对存储过程感到困惑。在这里,我们将所有与数据库相关的操作应用到代码中:

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 语句。

  1. 您应该检查 sql 中插入中的值以避免SQL注入。
  2. 数据访问代码不应位于视图模型中。它应该在模型中。

最新更新