2010-09-15 6 views
5

Tôi đang lãng phí thời gian với WebMatrix, và cho đến nay cách tốt nhất mà tôi đã tìm ra cách sử dụng thủ tục lưu trữ với Razor/WebMatrix cũng giống như SomaliWebMatrix và lưu trữ Thủ tục

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

Note, tôi m không làm bất kỳ loại kiểm tra cho tiêm SQL hoặc bất cứ điều gì như thế, mà tôi nghĩ rằng sẽ là uber cần thiết. Tui bỏ lỡ điều gì vậy?

Trả lời

6

Phương thức Execute chấp nhận tham số.

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

Cập nhật: Tôi đã cập nhật câu trả lời của tôi để các tham số cho sproc được cho placeholders đó được đánh số chứ không phải là tên.

+0

Tôi nghĩ câu trả lời này hiệu quả nhưng không. – infocyde

+1

Nó sẽ hoạt động ngay bây giờ khi Larsenal đã cập nhật câu trả lời để sử dụng ký hiệu @ 0, @ 1 cho trình giữ chỗ. Đó là cách mà trình trợ giúp cơ sở dữ liệu ánh xạ các giá trị tham số tới các phần giữ chỗ bên trong, theo chỉ mục, không phải tên. –

+0

Đây là vấn đề. Nếu proc có 10 params nhưng tôi chỉ cần vượt qua hai. Nếu tôi không đặt tên cho chúng, chúng được mong đợi theo thứ tự mà chúng được khai báo, vì vậy tôi sẽ phải đặt các giá trị giữ chỗ giống như exec dbo.myproc null, null, @ 0, 1, "server", @ 1 "Tôi không thích. Cộng thêm nếu thứ tự của các tham số thay đổi, thì tôi phải quay lại và cập nhật mã Razor trong webmatrix. Tôi biết, nó vẫn đang trong giai đoạn thử nghiệm, và webmatrix đang nhắm mục tiêu các cấp độ nhập cảnh, nhưng nó sẽ – infocyde

3

tốt, đây là những gì tôi thấy là dễ nhất và bạn có thể sử dụng các tham số được đặt tên. Có nghĩa là, nếu thủ tục lưu trữ của bạn có một số tham số tùy chọn, bạn chỉ có thể chuyển những thông số bạn cần hoặc muốn vượt qua.

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