2009-03-04 37 views
1

如何根据要存储在数据库中的输入变量确定将哪个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之间创建一个简单的映射系统。然后,只需根据存储数据的要求将参数映射到数据库类型即可。

好的是,如果你现在去做这个工作,你可以重用库,或者创建一个接口并为每个版本的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 2009-12-10 04:26:59