小弟看了一下PetShop的源码,有些地方没有弄懂请教一下各位大侠。里面有一个对数据库操作的类SqlHelper中有一个ExecuteReader方法查询数据库返回,最后释放连接是怎么写的,我怎么没有找到,我直接用这个方法来查询数据,打开的连接最后都没有释放呀!! 各位大侠请“指教”
解决方案 »
- 要实现“7天记住密码”还要在登陆过程中更新COOKIE,怎么处理?
- 求电影数据库的开发接口
- 在c#里表示路径"c:\aaaa.xml"为什么要写成"c:\\aaaa.xml" ?
- 一个很简单但很重要的问题,但我不会.
- 在ASP.NET 2.0 中GridView 为什么不显示数据类型为image 的列
- 谁有infomix的SDK,因为要用在.net环境下,SDK需要FOR WINDOWS 2。9以上版本的。
- 怎样可以dataGridView的第一列中显示这一行是第几条记录?
- 请高手推荐C#入门书籍
- 100分求怎样实现系统检测:如果鼠标左键按住一个地方停留3秒再松开,那么调用鼠标右键的动作???
- 如何使SQLPARAMETERCOLLECTION对象实例化?
- C#怎样处理输入字符的异常
- 如何读取BCDIC码和big endian二进制混和的数据文件?
CommandBehavior.CloseConnection
在执行该命令时,如果关闭关联的 DataReader 对象,则关联的 Connection 对象也将关闭。
///使用给定的连接字符串 执行SQL命令并返回结果集
/// </summary>
/// <res>
/// 例如:
/// SqlDataReader r = ExecuteReader(connString, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24));
/// </res>
/// <param name="connectionString">连接字符串</param>
/// <param name="commandType">SQL命令类型(字符串或者存储过程)</param>
/// <param name="commandText">SQL命令字符串或者存储过程名字</param>
/// <param name="commandParameters">SQL命令的参数,可单个或者数组</param>
/// <returns>SqlDataReader</returns>
public static SqlDataReader ExecuteReader(string p_cnString, CommandType p_cmdType, string p_cmdText, params SqlParameter[] p_cmdParms)
{
SqlCommand cmd = new SqlCommand();
SqlConnection cn = new SqlConnection(p_cnString);
//在此处使用try/catch是因为如果抛出异常我们希望关闭连接,而当没有datareader时,commandBehaviour.CloseConnection不会自动关闭连接
try
{
PrepareCommand(cmd, cn, null, p_cmdType, p_cmdText, p_cmdParms);
SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
//CommandBehavior.CloseConnection,关闭关联的 DataReader 对象,则关联的 Connection 对象也将关闭
cmd.Parameters.Clear();
return dr;
}
catch
{
cn.Close();
throw;
}
}
int val = cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
return val;
}
================================
你说的这个注释如下
/// <summary>
/// 使用现有的数据库连接 执行SQL命令(不返回结果集)
/// 说明:一般在连续执行多个Command命令时使用该函数(即使用同一个数据库连接提高性能)
/// </summary>也就是说 这个函数是需要手动释放的,适用于连续执行多个Command命令
比如可以这样
using (SqlConnection cn = new SqlConnection(p_cnString))
{
ExecuteNonQuery(......) ;//第一个
ExecuteNonQuery(......) ;//第2个
ExecuteNonQuery(......) ;//第3个
}
区别于以下,以下适用于一个SQL命令
---------------------------------------
/// <summary>
///使用给定的连接字符串 执行SQL命令(不返回结果集)
///说明:一般在执行单个Command命令时使用,如果连续执行多个Command命令不使用该函数
/// </summary>
public static int ExecuteNonQuery(string p_cnString, CommandType p_cmdType, string p_cmdText, params SqlParameter[] p_cmdParms)
{ SqlCommand cmd = new SqlCommand(); using (SqlConnection cn = new SqlConnection(p_cnString))
{
PrepareCommand(cmd, cn, null, p_cmdType, p_cmdText, p_cmdParms);
int val = cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
return val;
}
}
using (SqlConnection cn = new SqlConnection(p_cnString))