2010-05-13 19 views
7

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlparametercollection.addwithvalue.aspxSQL - .NET - SqlParameters - AddWithValue - Có bất kỳ tác động tiêu cực nào về hiệu suất khi Loại thông số không được chỉ định không?

Tôi được sử dụng để thêm tham số sql vào sqlCommand bằng hàm add(). Điều này cho phép tôi chỉ định loại sqlParameter, nhưng nó yêu cầu một dòng khác để đặt giá trị.

Thật tuyệt khi sử dụng hàm AddWithValue, nhưng nó bỏ qua bước "chỉ định loại tham số".

Tôi đoán điều này làm cho các thông số được gửi qua dưới dạng chuỗi chứa trong dấu nháy đơn (''), nhưng tôi không chắc chắn.

Đây có phải là trường hợp không và điều này có gây ra hiệu suất chậm hơn đáng kể của các thủ tục được lưu trữ không? Lưu ý: Tôi hiểu rằng nó là tốt đẹp để xác nhận hợp lệ dữ liệu người dùng trên bên .NET của sự vật bằng cách xác định kiểu dữ liệu cho params - Tôi chỉ quan tâm đến chi phí phản xạ kiểu của AddWithValue hoặc trên NET hoặc NET. Phía SQL.

Trả lời

6

Loại khấu trừ xảy ra ở phía máy khách. Bên trong SqlParameter, về cơ bản nó có một câu lệnh chuyển đổi bit để xác định loại SQL mà giá trị bạn chỉ định tương ứng với. Vì vậy, không có sự khác biệt trong những gì được gửi đến SQL Server, nhưng có một chi phí rất nhỏ để xác định loại SQL loại .NET của bạn tương ứng với. Trong kế hoạch lớn của sự vật, chi phí hiệu suất thậm chí sẽ không hiển thị dưới dạng một đốm sáng bên cạnh thời gian thực tế trong cuộc gọi cơ sở dữ liệu.

Bạn vẫn có thể làm điều đó trong một dòng trong khi xác định kiểu SQL: Phương pháp

cmd.Parameters.Add("@something", SqlDbType.NVarChar).Value = someString; 
+0

tôi sắp làm một phương pháp mở rộng, nhưng điều này có vẻ tốt hơn nhiều. –

0

Dean của hoạt động hoàn hảo tốt, nhưng tôi nghĩ rằng nó trông hơi kỳ quặc. Dưới đây là một phương pháp mở rộng mà bạn có thể sử dụng để quá tải AddWithValue để có trong một SqlDbType để bạn có thể chuyển cuộc gọi chức năng vào một liner:

<Extension()> 
Public Function AddWithValue(ByVal sqlParameterCollection As SqlParameterCollection, 
          ByVal parameterName As String, 
          ByVal value As Object, 
          ByVal sqlDbType As SqlDbType) As SqlParameter 
    sqlParameterCollection.Add(parameterName, sqlDbType) 
    sqlParameterCollection(parameterName).Value = value 
    Return sqlParameterCollection(parameterName) 
End Function 

Sau đó gọi nó là như thế này:

cmd.Parameters.AddWithValue("@entity_uid", clientId, SqlDbType.Int) 
Các vấn đề liên quan