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

时间:2012-05-18 09:19:17

标签: c# wpf 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);

我们可以在存储过程中应用它吗?如果是这样:怎么样?存储过程有什么优势呢?

2 个答案:

答案 0 :(得分:3)

MVVM与您的SQL问题无关。

基本上,您不应将值串联到SQL表达式中,因为它允许最终用户注入SQL代码。即。 非常糟糕的主意

存储过程可让您更好地控制参数并避免注入攻击。它还允许您进行细微的更改,例如如果数据库略有变化,而不更改调用的C#代码。

不幸的是,似乎SQLite不支持存储过程,因此您可能希望改变您的方法。请看一下这个链接:http://www.sqlite.org/whentouse.html

如果您必须坚持使用SQLite,而不是说SQL CE,则需要在代码中添加验证检查以确保不插入SQL语句。

答案 1 :(得分:0)

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