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

标签 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,这会导致异常。

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

最佳答案

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

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

请注意,当转换失败时,您将必须处理异常,这使得像这样的扩展方法受到怀疑。

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

关于c# - 处理数据类型转换的通用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19723604/

相关文章:

c# - 通过 Ajax 将数组传递给 MVC Action

c# - 如何在 SpecFlow 中使用 table.CreateSet<>(myClass)() 生成缺失值?

c# - 找不到命名空间名称 'p'(是否缺少 using 指令或程序集引用?)

php - 如何从php中的数据库中获取相关主题

php - 根据mysql数据库检查php登录表单

PostgreSQL - 将列数据类型从整数更改为整数数组

c# - 通过忽略编码进行字符串比较

php - 如果 id 不存在则插入或如果 id 存在则更新表查询?

通过 %x 进行 C 编程数字表示

c++ - 仅更改 C++ 模板中类型的一部分