1

DBに格納する入力変数に応じて、パラメーターに割り当てるSQLDBTypeを決定するにはどうすればよいですか?テストする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
4

1 に答える 1

3

特に、より正確なデータ型(floatではなく10進数、さらにはbigint)を使用する必要がある場合は、SqlDbTypeが多すぎて(バージョンが多すぎて)安全に希望どおりに実行できません。

SMOを使用して、.NETデータ型とSqlDbTypesの間に単純なマッピングシステムを作成することを検討します。次に、データの保存に必要なパラメータを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
}
于 2009-06-20T10:35:55.820 に答える