5

我在玩 WebMatrix,到目前为止,我想出如何将存储过程与 Razor/WebMatrix 一起使用的最好方法就是这样-

@if (IsPost) {

   var LinkName = Request["LinkName"];
   var LinkURL  = Request["LinkURL"];

   string sQ = String.Format("execute dbo.myprocname @LinkName=\"{0}\",
 @LinkURL=\"{1}",LinkName, LinkURL);

   db.Execute(sQ);
}

请注意,我没有对 SQL 注入或类似的事情进行任何形式的检查,我认为这是非常必要的。我错过了什么吗?

4

2 回答 2

6

Execute方法接受参数。

@if (IsPost) {
  var LinkName = Request["LinkName"];
  var LinkURL = Request["LinkURL"];
  string SQL = "exec dbo.myprocname @0, @1";
  db.Execute(SQL, LinkName, LinkURL);
}

更新:我已经更新了我的答案,以便为 sproc 的参数提供编号而不是命名的占位符。

于 2010-09-16T00:09:35.873 回答
3

好吧,这是我发现的最简单的方法,您可以使用命名参数。这意味着,如果您的存储过程有多个可选参数,则只能传递您需要或想要传递的参数。

@{
    var db = Database.Open("your database name");
    var param1 = "informationhere";
    var param2 = "informationhere";
    // or var param2 = 15247 (no quotes necessary if param is an integer datatype)
    var procRows = db.Query("Exec dbo.procName @RealParameterName1=@0, @RealParameterName2=@1", param1, param2);
}

<table>
@foreach( var procRow in procRows )
{
    <tr>
        <td>@procRow.ColumnName1</td>
        <td>@procRow.ColumnName2</td>
        <td>@procRow.ColumnName3</td>
        //etc
    </tr>
}    
</table>
于 2012-10-17T14:34:45.713 回答