如何根据要存储在DB中的输入变量确定要分配给参数的SQLDBType?是否有一个GetType equivelant来测试?
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
答案 0 :(得分: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
}