razor和cshtml:如何为select语句db.Execute?

时间:2014-06-24 22:14:24

标签: c# razor

我正在做一个快速的CSHTML页面以进行测试。

我需要根据URL上的id参数访问数据库:

var id = Request.QueryString["id"];
var db = Database.Open("mydatabase_connection");
var query = "select * from myrecord where id =  " + id;
var row = db.QuerySingle(query);

//我能够以下列方式显示所选记录的字段(称为名称):

@row.name

显然,上述方法受到安全攻击。我希望通过以下方式检索记录:

var query = "select * from myrecord where id=@0";
var row = db.Execute(query, id);

但是,检索字段值时出现运行时错误:

@row.name

获取"行"的正确方法是什么?在第二种方法?

谢谢和问候。

1 个答案:

答案 0 :(得分:1)

Database.Execute用于执行非查询SQL语句,并将受SQL语句影响的记录数作为Int返回。

我认为您要使用的方法确实是Database.QuerySingle,它会返回Object

即。

var query = "select * from myrecord where id=@0";
var row = db.QuerySingle(query, id);

剃刀:

  @row.name

就SQL注入的安全性而言,这种方法是安全的。您将URL值作为参数传递给查询。

运行查询的不安全方式将使用字符串连接:

   var query = "select * from myrecord where id=" + id; 

不要这样做!它允许恶意用户将SQL语句附加到您的查询中!请始终使用parameterized queries