处理数据类型转换的通用函数

时间:2013-11-01 08:57:01

标签: c# mysql type-conversion

我在C#中有以下函数,我想传递一个MySQL DataReader值/对象。

如果传递的对象的值是DBNull,我需要处理它并返回该数据类型的Null值,例如null int。

否则我想转换返回的值,如Convert.ToInt32(value)或类似的。我的功能是;

public static T ConvertFromDB<T>(object value)
{
     return value == DBNull.Value ? default(T) : (T)value;
}

我可以像

一样调用这个函数
int MyInt = ConvertFromDB(oRes["FieldName"]);

但是在这种情况下,oRes [“FieldName”]的MySQLDataReader结果是一个DBNull,它会导致异常。

有人可以提供任何帮助吗?我使用强类型列,但我遇到的问题是如果DB值是DBNull,我需要返回该数据类型的null,例如(int)null

1 个答案:

答案 0 :(得分:1)

也许您正在寻找Convert.ChangeType()

return value == DBNull.Value ? default(T) : (T) Convert.ChangeType(value, typeof(T));

请注意,转换失败时您将不得不处理异常,这会使此类扩展方法受到怀疑。

也就是说,如果您正在阅读强类型列,它们应该已经是您想要的格式。为什么不使用SqlDataReader.GetInt32()(或类似的)?如果是因为你想使用SqlDataReader的索引运算符按名称引用你的数据库列,那么你可能会更好地使用一组扩展方法来添加重载并在其中调用GetOrdinal()代替。有些人可能认为这表明其他代码气味。