2009-03-04 3 views
1

Как определить, какой SQLDBType следует назначать параметру в зависимости от входной переменной для хранения в БД? Есть ли тестовый метод GetType для тестирования?Как определить SQLDBType переменной, которая будет добавлена ​​к параметру?

If IsNumeric(ParameterValue) Then 
    Parameter.SqlDbType = SqlDbType.Float 
ElseIf IsDate(ParameterValue) Then 
    Parameter.SqlDbType = SqlDbType.DateTime 
ElseIf IsArray(ParameterValue) Then 
    Parameter.SqlDbType = SqlDbType.VarBinary 
Else 
    Parameter.SqlDbType = SqlDbType.VarChar 
End If 

ответ

3

Есть слишком много SqlDbTypes (через слишком много версий), чтобы сделать это безопасно, как вы хотите, особенно если вам нужно использовать более точные тип данных (например, десятичный, в отличие от плавать, или даже BigInt).

Я бы подумал о создании простой системы сопоставления между типами данных .NET и SqlDbTypes, используя SMO. Затем вы просто сопоставляете свои параметры с типом DB, как вам требуется для хранения данных.

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


Попробуйте это (C# код):

// Get the DataType from the DataRow in your result set 
public void GetDataType(DataRow dr) 
{ 
    DataType dt = new DataType((SqlDataType)Enum.Parse(typeof(SqlDataType), dr["DataTypeName"].ToString(), true)) 
    { 
     MaximumLength = Convert.ToInt32(dr["ColumnSize"]), 
     NumericPrecision = Convert.ToInt32(dr["NumericPrecision"]) 
    }; 
    // TODO: Map DataType to .NET datatype 
} 
+0

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

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

  • Нет связанных вопросов^_^