2010-09-15 8 views
5

Ich bin Herumalbern mit WebMatrix, und so weit der beste Weg, ich dachte schon, wie gespeicherte Prozeduren zu verwenden, mit Razor/WebMatrix ist wie so-WebMatrix und Stored Procedures

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

Hinweis, ich Ich mache keine Art von SQL-Injektionen oder etwas ähnliches, was ich für notwendig halte. Fehle ich etwas?

Antwort

6

Die Methode Execute akzeptiert Parameter.

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

Update: Ich habe meine Antwort aktualisiert, so dass die Parameter für die sproc gegeben sind Platzhalter, die nummeriert sind und nicht genannt.

+0

Ich dachte, diese Antwort hat funktioniert, aber es funktioniert nicht. – infocyde

+1

Es sollte jetzt funktionieren, dass Larsenal die Antwort aktualisiert hat, um die @ 0, @ 1-Notation für die Platzhalter zu verwenden. Auf diese Weise ordnet der Database-Helper Parameterwerte intern den Platzhaltern nach Index und nicht nach Name zu. –

+0

Hier ist das Problem. Was ist, wenn der Proc 10 Params hat, aber ich muss nur zwei übergeben. Wenn ich sie nicht nenne, werden sie in der Reihenfolge erwartet, in der sie deklariert sind, also müsste ich Halterwerte wie exec dbo.myproc null, null, @ 0, 1, "server", @ setzen. 1 "Ich nicht likey. Plus, wenn die Reihenfolge der Params ändert, dann muss ich zurückgehen und den Razor-Code in der Webmatrix aktualisieren. Ich weiß, es ist noch in der Beta und Webmatrix zielt auf Einsteiger, aber es würde Es ist nett, die Parameter zu benennen, anstatt den Index zu verwenden – infocyde

3

Nun, das ist, was ich gefunden habe, ist am einfachsten und Sie können benannte Parameter verwenden. Das heißt, wenn Ihre gespeicherte Prozedur mehrere optionale Parameter hat, können Sie nur diejenigen übergeben, die Sie benötigen oder weitergeben möchten.

@{ 
    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> 
Verwandte Themen