/// <summary>
/// ExecuteReader()方法——返回多行多列
/// </summary>
/// <param name="sql"></param>
/// <param name="parameters"></param>
/// <returns></returns>
public static SqlDataReader ExecuteReader(string sql, params SqlParameter[] parameters)
{
//定义连接变量conn
SqlConnection conn = new SqlConnection(connString);
//定义操作变量cmd
using (SqlCommand cmd = new SqlCommand(sql, conn))
{
conn.Open();
if (parameters != null)
{
cmd.Parameters.AddRange(parameters );
}
try
{
//定义一个dr去接收cmd.ExecuteReader()方法返回的数据
SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
return dr;
}
catch (Exception ex)
{
conn.Close();
throw ex;
}
}
}
第一个问题:SqlConnection conn = new SqlConnection(connString)为什么不写在using中?
第二个问题:SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection)括号内的参数是什么意思?;
第三个问题:既CommandBehavior.CloseConnection,既然在这里已经可以让conn可以随着dr的关闭而关闭了,那为什么在catch块中还要再关闭一次conn????
|