使用 Database.Query 已经取得了一个巨大的进步 https://stackoverflow.com/a/11905249/1152809关于我的代码的可读性:
String Select = 'sp_getAllUsers';
WebMatrix.Data.Database DB = WebMatrix.Data.Database.Open(MyConString);
var data = DB.Query(Select);
我想切换到非存储过程查询。这MSDN 说查询方法有一个可选参数 https://msdn.microsoft.com/en-us/library/webmatrix.data.database.query%28v=vs.111%29.aspx, Object[]
,可以作为 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);
我看过的所有来源似乎只是参考老办法 https://stackoverflow.com/a/11905249/1152809. This https://stackoverflow.com/questions/26471744/webmatrix-database-query-with-custom-commandtimeout很接近,但是他没有使用Query方法的parameter参数。
尝试使用以下语法:
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/ http://www.aspnet101.com/2010/07/webmatrix-tutorial-working-with-data/
此外,使用参数将始终防止 SQL 注入,因为它总是双引号单引号。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)