public static SqlDataReader ExecuteReader(...
{
....
return dr;
}
这个方法返回SqlDataReader 但是在返回的时候没有关闭SqlDataReader对象。
所以想到了这个方法。
public static DataTable ExecuteReader(...
{
......
DataTable tb=new DataTable();
tb.Load(dr);
dr.Close();
return tb;
}
我的问题是哪个方法好,返回DataTable和原方法有什么区别,这里困到了,想不通~1
{
....
return dr;
}
这个方法返回SqlDataReader 但是在返回的时候没有关闭SqlDataReader对象。
所以想到了这个方法。
public static DataTable ExecuteReader(...
{
......
DataTable tb=new DataTable();
tb.Load(dr);
dr.Close();
return tb;
}
我的问题是哪个方法好,返回DataTable和原方法有什么区别,这里困到了,想不通~1
获取只读数据,需要快速变比SqlDataReader
/// <summary>
/// 获取记录集
/// </summary>
/// <param name="StrCmdText">待返回的数据集</param>
/// <returns>返回值为SqlDataReader</returns>
public static SqlDataReader ReturnReader(string StrCmdText)
{
OpenConnection(); //这个是打开数据连接,自己再写一下。
SqlDataReader ObjDataReader = null;
SqlCommand ObjCommand = new SqlCommand(StrCmdText, ObjConnection); try
{
ObjDataReader = ObjCommand.ExecuteReader(); if (ObjDataReader.Read())
{
return ObjDataReader;
}
else
return null;
}
catch (SqlException Ex)
{
StrErrMessage = "执行数据库失败:" + Ex.Message;
return null;
}
finally
{
CloseConnection();
ObjDataReader.Close(); ObjDataReader.Dispose();
}
}
都return了
怎么会执行finally
SqlCommand cmd = new SqlCommand();
SqlConnection conn = new SqlConnection(connectionString); // we use a try/catch here because if the method throws an exception we want to
// close the connection throw code, because no datareader will exist, hence the
// commandBehaviour.CloseConnection will not work
try {
PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
cmd.Parameters.Clear();
return rdr;
}
catch {
conn.Close();
throw;
}
cmd.ExecuteReader(CommandBehavior.CloseConnection);
再Reader关闭后关闭数据库连接