传递SqlDataReader作为转换参数

Ash*_*ani 2 c# sqldatareader type-conversion sqldatatypes

用于转换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
Run Code Online (Sandbox Code Playgroud)

我想用这些函数创建一个类:

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后使用:

int i=c.Int(reader,"i");
bool b=c.Bool(reader,"b");
DateTime dt = c.Date(reader,"dt");
Run Code Online (Sandbox Code Playgroud)

我想知道将datareader作为参数传递是个好主意吗?任何人都有更好的想法来铸造datareader数据?

Ser*_*kiy 5

是的,可以将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));
    }
}
Run Code Online (Sandbox Code Playgroud)

用法如下:

int i = reader.GetInt32("i");
bool b = reader.GetBoolean("b");
Run Code Online (Sandbox Code Playgroud)