Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我们可以在mvvm中应用存储过程吗?说理_C#_Wpf_Mvvm - Fatal编程技术网

C# 我们可以在mvvm中应用存储过程吗?说理

C# 我们可以在mvvm中应用存储过程吗?说理,c#,wpf,mvvm,C#,Wpf,Mvvm,在这里,我对存储过程感到困惑。在此,我们将所有与数据库相关的操作应用到代码中: string query = "insert into accounts(name, opening_balance, category, address, contact_person, phone_number) values(" + "'" + account.Name + "',"

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

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似乎不支持存储过程,所以您可能希望改变您的方法。请查看此链接:


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

MVVM与您的SQL问题无关

基本上,您不应该将值串到一个SQL表达式中,因为它允许最终用户注入SQL代码。真是个坏主意

存储过程使您能够更好地控制参数并避免注入攻击。它还允许您进行细微的更改,例如,如果数据库稍有更改,则无需更改调用的C#代码

不幸的是,SQLite似乎不支持存储过程,所以您可能希望改变您的方法。请查看此链接:

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

  • 您应该检查sql中插入的值,以避免 sql注入
  • 数据访问代码不应在viewmodel中。它应该在模型中
  • 您应该检查sql中插入的值,以避免 sql注入
  • 数据访问代码不应在viewmodel中。它应该在模型中
    您的代码可能有SQL注入漏洞。MVVM和存储过程是正交的-您可以同时使用或分别使用它们。@Oded:嘿,您可以看到我们正在使用sqlite数据库的代码。在sqlite存储过程中应用吗?我不明白您为什么不能。如果数据库支持存储过程,则数据提供程序库将允许您使用它们。@prjndhi:是!永远不要将SQL语句连接在一起--永远!没有例外。您的代码可能有SQL注入漏洞。MVVM和存储过程是正交的-您可以同时使用或分别使用它们。@Oded:嘿,您可以看到我们正在使用sqlite数据库的代码。在sqlite存储过程中应用吗?我不明白您为什么不能。如果数据库支持存储过程,则数据提供程序库将允许您使用它们。@prjndhi:是!永远不要将SQL语句连接在一起--永远!也不例外。嘿,这个项目是作为桌面应用程序进行的。如果我们想将其作为web应用程序使用,那么我们会将视图更改为silver light。但根据缺点,当时我们可能不会使用sqlite。然后我们必须将文件中的所有查询更改为在SP中转换?您应该更改您的查询,因为它们不安全,但是,如果您确实使用web应用程序,则可以使用适当的SQL server。如果可以的话,您应该使用实体框架&linqtosql,而不是普通的SQL命令。实体框架和LINQ都旨在使数据库工作更易于编码。嘿,此项目作为桌面应用程序运行。如果我们想将其作为web应用程序使用,则我们会将视图更改为silver light。但根据缺点,当时我们可能不会使用sqlite。然后,我们必须将文件中的所有查询更改为在SP中转换?您仍应更改查询,因为它们不安全,但是,如果您确实使用web应用程序,则可以使用适当的SQL server。如果可以的话,您应该使用实体框架&linqtosql,而不是普通的SQL命令。实体框架和LINQ都是为了使数据库工作更容易编码而设计的。