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注入漏洞。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都是为了使数据库工作更容易编码而设计的。