【问题标题】:How to add parameters to WebMatrix Database.Query?如何向 WebMatrix Database.Query 添加参数?
【发布时间】:2015-05-21 10:05:38
【问题描述】:

使用 Database.Query 使a huge improvement 提高了我的代码的可读性:

String Select = 'sp_getAllUsers';
WebMatrix.Data.Database DB = WebMatrix.Data.Database.Open(MyConString);
var data = DB.Query(Select);

我想切换到非存储过程查询。 MSDN says there's an optional parameter to the Query MethodObject[],可以作为 SQL 参数传递,但是它们没有任何关于它的更多信息。

所以我有两个问题:

  • 如何创建Object[]
  • 以这种方式添加参数能否防止黑客威胁,例如 SQL 注入?

这是我尝试过的精简版:

Select = "Select * From Users Where first_name = "Foo" AND last_name = "Bar"

// Like Javascript
Object[] params = {"first_name" : "Foo"}, {"last_name" : "Bar"};

// More Like What I think it will be
Object[] Params = (String Name = "first_name", String First_Name = "Foo");

var data = DB.Query(Select, params);

我查看的所有来源似乎都只引用了the old wayThis很接近,但是他没有使用Query方法的参数参数。

【问题讨论】:

标签: c# asp.net-mvc-4 webmatrix


【解决方案1】:

尝试使用以下语法:

string selectCommand = "sp_getAllUsers(@0, @1)";
// selectCommand = "Select * From Users Where first_name = @0 AND last_name = @1";
...
var data = DB.Query(selectCommand, "Foo", "Bar");

更多信息,请参阅: http://www.aspnet101.com/2010/07/webmatrix-tutorial-working-with-data/

此外,使用参数将始终防止 SQL 注入,因为它总是双引号单引号。

【讨论】:

  • 这行得通,但是,我的另一个问题没有得到回答,这种添加参数的方法会防止 SQL 注入吗?或者我应该这样做:Select * From Users Where first_name = N'@0' AND last_name = N'@1'
  • 使用参数将始终防止 SQL 注入,因为它们总是双引号单引号。
  • 如果这解决了您的问题,请将其作为解决方案。谢谢! :)
猜你喜欢
  • 1970-01-01
  • 2020-07-09
  • 2014-08-07
  • 2021-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-21
相关资源
最近更新 更多