传递 SqlDataReader 作为转换的参数
本文关键字:参数 转换 SqlDataReader 传递 | 更新日期: 2023-09-27 18:36:20
对于 SqlDataReader 的强制转换数据,我做了这些(常见数据类型的示例):
string name = reader["name"].ToString(); //for string
int i = 0; i = int.TryParse(reader["i"].ToString(), out i); //for int
int i = reader.GetInt32(reader.GetOrdinal("i")); //or this again for int
bool b = reader.GetBoolean(reader.GetOrdinal("b")); // for boolean
我想创建一个具有以下函数的类:
public static class gd{
public static bool Bool(SqlDataReader rd, string name)
{
return rd.GetBoolean(rd.GetOrdinal(name));
}
public static int Int(SqlDataReader rd, string name)
{
int i=0;
i = int.TryParse(reader["i"].ToString(), out i);
return i;
}
}
然后只需使用:
int i=c.Int(reader,"i");
bool b=c.Bool(reader,"b");
DateTime dt = c.Date(reader,"dt");
我想知道将数据读取器作为参数传递是个好主意吗? 有人对转换数据读取器数据有更好的想法吗?
是的,可以将 DataReader 作为参数传递(与任何其他引用类型一样)。传递读取器时,仅将对它的引用传递给另一个方法。使用方法使您的代码更具可读性和可维护性是可以的。
您可以编写扩展方法以简化代码:
public static class Extensions
{
public static bool GetBoolean(this IDataReader reader, string name)
{
return reader.GetBoolean(reader.GetOrdinal(name));
}
public static int GetInt32(this IDataReader reader, string name)
{
return reader.GetInt32(reader.GetOrdinal(name));
}
}
用法如下所示:
int i = reader.GetInt32("i");
bool b = reader.GetBoolean("b");
如果您希望
在内部处理异常,您的想法似乎很好(传递对 SqlDataReader 的引用不会滞后应用程序)。可以使用 SqlDataReader 类专门提供的方法获取所需格式的数据:
http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.aspx
检查这些方法是否适合您。如果没有,您的静态帮助程序类似乎没问题,但我建议您避免复制 SqlDataReader 中已经实现的功能,因为重新发明轮子有什么意义?