2015-05-18 3 views
4

У меня есть этот рабочий код ниже. Однако у меня нет конструктора SqlParameter, который принимает имя, значение и SqlDbType, и я хочу просто указать тип для параметров даты. Есть ли способ сделать то, что не требует добавления большого количества кода?Эффективный способ предоставления SqlDbType?

SqlParameter[] parameters = 
{ 
    new SqlParameter("@START_ORDER", startOrder), 
    new SqlParameter("@END_ORDER", endOrder), 
    new SqlParameter("@START_ITEM", startItem), 
    new SqlParameter("@END_ITEM", endItem), 
    new SqlParameter("@START_DUEDATE", dateFrom), 
    new SqlParameter("@END_DUEDATE", dateTo) 
}; 

ответ

6
new SqlParameter("@name", SqlDbType.Whatever) { Value = value } 

Есть constructor overloads, которые принимают все виды параметров, но они, возможно, не стоит хлопот с указанием каждого и каждый аргумент. Вышеприведенное, вероятно, так же просто, как и получается.

(Обратите внимание, что в некоторых случаях вы можете захотеть установить SqlValue вместо Value.)

+0

Во-первых, спасибо. Во-вторых, можете ли вы расширить, когда (или нет) использовать 'SqlValue'? – CodenameCain

+1

Добро пожаловать. Что касается бит 'SqlValue', я буду комментировать только потому, что это в основном в стороне. В основном это сводится к тому, что 'SqlValue' и различные типы' Sql ... 'позволяют более точно узнать точное значение, которое вы хотите отправить на SQL Server. Примеры: ** 1. ** Возможно, вы захотите избежать потерь точности из-за преобразования значений, например. с 'SqlDateTime' и' DateTime', которые имеют разные представления и исправления. ** 2. ** '' Sql ... 'все поддерживает' NULL'. ** 3. ** Использование 'SqlDecimal' вместо' decimal' позволяет вам точно определить точность и масштаб. – stakx

1

Если вы делаете много ручного ADO.NET, хорошая альтернатива может быть, чтобы построить несколько помощников в базовый класс или служебный класс, который будет также помогать в обеспечении вы передаете в нужных типов:

public static SqlParameter CreateStringParam(string paramName, 
    int length, string value) {} 
public static SqlParameter CreateIntParam(string paramName, 
    int? value) {} 
// etc... 

Эти помощники могли бы помочь вам путем преобразования null в DBNull.Value, и гарантируя, что вы помните о размере параметра для строк и номера.

В большинстве случаев вам придется построить дюжину или около того, но, скорее всего, вы используете только несколько типов данных, поэтому вам не нужно много таких.

Смежные вопросы