2010-09-15 32 views
5

estoy jugando con WebMatrix, y hasta ahora la mejor manera que he descubierto cómo utilizar procedimientos almacenados con la maquinilla de afeitar/WebMatrix es como so-WebMatrix y procedimientos almacenados

@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); 
} 

Nota, yo No estoy haciendo ningún tipo de comprobación de inyecciones de SQL o algo por el estilo, que creo que sería más necesario. ¿Me estoy perdiendo de algo?

Respuesta

6

El método Execute acepta parámetros.

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

Actualización: He actualizado mi respuesta para que los parámetros para el procedimiento almacenado se dan marcadores de posición que se numeran en lugar de nombrados.

+0

Pensé que esta respuesta funcionó, pero no es así. – infocyde

+1

Debería funcionar ahora que Larsenal ha actualizado la respuesta para usar la notación @ 0, @ 1 para los marcadores de posición. Así es como el ayudante de la base de datos asigna los valores de los parámetros a los marcadores de posición internamente, por índice, no por nombre. –

+0

Aquí está el problema. ¿Qué pasa si el proceso tiene 10 params pero solo necesito pasar dos? Si no los nombre, se esperan en el orden en el que se declaran, por lo que tendré que poner en su lugar los valores del titular como exec dbo.myproc null, null, @ 0, 1, "server", @ 1 "No me gusta. Además, si el orden de los parámetros cambia, entonces tengo que volver y actualizar el código de Razor en webmatrix. Lo sé, todavía está en versión beta, y webmatrix está dirigido a gente de nivel de entrada, pero lo haría Sería bueno poder nombrar los parámetros en lugar de utilizar el índice. – infocyde

3

bueno, esto es lo que encontré más fácil y puede usar parámetros con nombre. Es decir, si su procedimiento almacenado tiene varios parámetros opcionales, solo puede pasar los que necesita o desea pasar.

@{ 
    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 @[email protected], @[email protected]", param1, param2); 
} 

<table> 
@foreach(var procRow in procRows) 
{ 
    <tr> 
     <td>@procRow.ColumnName1</td> 
     <td>@procRow.ColumnName2</td> 
     <td>@procRow.ColumnName3</td> 
     //etc 
    </tr> 
}  
</table> 
Cuestiones relacionadas