2010-09-15 10 views
5

mam wygłupiać z WebMatrix i jak dotąd najlepszym sposobem mam zorientowali się, jak korzystać z procedur przechowywanych Razor/WebMatrix jest jak SO-WebMatrix i procedur przechowywanych

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

Uwaga, I” nie robię żadnego sprawdzania zastrzyków SQL ani niczego podobnego, co moim zdaniem byłoby konieczne. Czy czegoś brakuje?

Odpowiedz

6

Metoda Execute akceptuje parametry.

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

Aktualizacja: zaktualizowałem moją odpowiedź tak, że parametry sproc podano zastępcze, które są numerowane, a nie nazwanych.

+0

Myślałem, że ta odpowiedź zadziałała, ale nie działa. – infocyde

+1

Powinno zadziałać teraz, gdy Larsenal zaktualizował odpowiedź, aby użyć zapisów @ 0, @ 1 dla symboli zastępczych. W ten sposób pomocnik bazy danych odwzorowuje wartości parametrów na elementy zastępcze wewnętrznie, według indeksu, a nie nazwy. –

+0

Oto problem. Co jeśli proc ma 10 par, ale muszę tylko przejść dwa. Jeśli ich nie nazywam, są one oczekiwane w kolejności, w której są zadeklarowane, więc musiałbym wstawić wartości właściciela, takie jak exec dbo.myproc null, null, @ 0, 1, "server", @ 1 "I no likey", a co jeśli kolejność zmian parametrów się zmieni, to muszę wrócić i zaktualizować kod Razor w webmatrixie. Wiem, że wciąż jest w wersji beta, a webmatrix jest skierowany do osób z pierwszego poziomu, ale być miły, aby móc nazwać parametry zamiast używać indeksu – infocyde

3

cóż, to jest to, co znalazłem jest najłatwiejsze i można użyć nazwanych parametrów. Oznacza to, że jeśli procedura składowana ma kilka opcjonalnych parametrów, możesz tylko przekazać te, które potrzebujesz lub chcesz przekazać.

@{ 
    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> 
Powiązane problemy