2009-03-04 9 views
1

DBに格納する入力変数に応じて、どのSQLDBTypeをパラメータに割り当てるかを決定するにはどうすればよいですか?テストするGetType equivelantはありますか?パラメータに追加する変数の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することがあります)。

SMOを使用して.NETデータ型とSqlDbTypesの間の単純なマッピングシステムを作成することを検討します。次に、データの格納に必要なパラメータをDBタイプにマップするだけです。

ここでこの作業に進むと、ライブラリを再利用したり、インターフェイスを作成してSQLの各バージョンごとに拡張することができます。良いアイデアだ

// 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


は、この(C#コード)を試してみてください。私はそれが好きですが、アイテムが一度に1つのベースで、配列されているので、私はそれをかなりそうすることはできません。代わりに、私は実際に既知の型をチェックしています。より具体的にする必要があるところでは、特定のデータ型を追跡するために配列に余分な要素を追加しました。 – Middletone

関連する問題