Как определить тип SQLDBT для переменной, которая будет добавлена ​​к параметру? - PullRequest
1 голос
/ 05 марта 2009

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

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

1 Ответ

3 голосов
/ 20 июня 2009

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

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

Приятно то, что если вы сейчас приступите к этим усилиям, вы сможете повторно использовать библиотеку или создать интерфейс и расширить его для каждой версии 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
}
...