Stored procedures Webmatrix和存储过程

Stored procedures Webmatrix和存储过程,stored-procedures,razor,webmatrix,Stored Procedures,Razor,Webmatrix,我在玩弄WebMatrix,到目前为止,我发现如何将存储过程与Razor/WebMatrix结合使用的最好方法就是这样- @if (IsPost) { var LinkName = Request["LinkName"]; var LinkURL = Request["LinkURL"]; string sQ = String.Format("execute dbo.myprocname @LinkName=\"{0}\", @LinkURL=\"{1}",LinkNa

我在玩弄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注入或类似的检查,我认为这是uber所必需的。我遗漏了什么吗?

执行方法接受参数

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

更新:我已经更新了我的答案,这样存储过程的参数就会被赋予占位符,占位符是编号的,而不是命名的。

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

@{
    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>
@{
var db=Database.Open(“您的数据库名称”);
var param1=“informationhere”;
var param2=“informationhere”;
//或var param2=15247(如果param是整数数据类型,则不需要引号)
var proclows=db.Query(“Exec dbo.procName@RealParameterName1=@0,@RealParameterName2=@1”,param1,param2);
}
@foreach(procRows中的变量procRow)
{
@procRow.ColumnName1
@procRow.columnname 2
@procRow.columnname 3
//等
}    

现在,Larsenal已经更新了答案,使用@0、@1符号表示占位符,应该可以了。这就是数据库帮助器如何在内部通过索引而不是名称将参数值映射到占位符。如果proc有10个参数,但我只需要通过两个。如果我不给它们命名,它们应该按照声明的顺序来命名,因此我必须放置一些类似exec dbo.myproc null、null、@0、1、“server”和@1的占位符值“我不喜欢。另外,如果参数的顺序发生变化,那么我必须返回并更新webmatrix中的Razor代码。我知道,它仍处于测试阶段,webmatrix的目标用户是入门级人员,但如果能够命名参数而不是使用索引,那就太好了。我想现在的数据库助手不支持参数名,所以我发布的原始代码是唯一可以使用命名参数和存储过程的解决方案,这项工作打开了一些虫子罐头。希望下一个beta版将有一个更好的使用存储过程的方法,比如以某种方式支持参数命名。