1

如何根据要存储在数据库中的输入变量确定将哪个 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

有太多 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
}
于 2009-06-20T10:35:55.820 回答