2009-03-04 4 views
1

Wie kann ich feststellen, welcher SQLDBType einem Parameter zugewiesen werden soll, abhängig von der Eingabevariablen, die in der DB gespeichert werden soll? Gibt es ein GetType-Equivalent zum Testen?Wie kann ich den SQLDBType einer Variablen bestimmen, die einem Parameter hinzugefügt werden soll?

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 

Antwort

3

Es gibt zu viele SqlDbTypes (über zu viele Versionen) es die sicher so, wie Sie wollen, zu tun, vor allem, wenn Sie genauere Datentypen (zB dezimal im Gegensatz zu schweben, oder sogar Bigint verwenden müssen).

Ich würde unter Verwendung von SMO ein einfaches Mapping-System zwischen .NET-Datentypen und SqlDbTypes erstellen. Dann ordnen Sie einfach Ihre Parameter dem DB-Typ zu, wie Sie zum Speichern der Daten benötigen.

Die nette Sache ist, dass, wenn Sie jetzt zu diesem Aufwand gehen, Sie die Bibliothek wiederverwenden können, oder erstellen Sie eine Schnittstelle und erweitern Sie es für jede Version von SQL.


Versuchen Sie, diese (C# -Code):

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

Das ist eine gute Idee. Ich mag es, aber weil die Gegenstände einzeln hintereinander angeordnet sind und in einer Reihe sind, kann ich es nicht ganz so machen. Stattdessen suche ich nach bekannten Typen, und wo ich genauer sein muss, habe ich dem Array einige zusätzliche Elemente hinzugefügt, um bestimmte Datentypen zu verfolgen. – Middletone

Verwandte Themen