欢迎光临

木子屋

标题: CommandBehavior.CloseConnection使用示例

作者: dnawo

日期: 2011-11-24 06:22 PM

分类: Win编程

内容: 复制内容到剪贴板 程序代码public static SqlDataReader ExecuteReader(string sql)
{
conn.Open();
SqlCommand cmd = new SqlCommand(sql, conn);
SqlDataReader idr = cmd.ExecuteReader();
//conn.Close();
return idr;
}
在上边代码中，因为其他程序要使用ExecuteReader方法返回的SqlDataReader对象，所以我们不能调用Close方法关闭conn，否则程序会出错：
引用内容阅读器关闭时尝试调用 Read 无效。
但这样会带来新的问题，因为conn没有关闭，结果会导致创建的数据库连接没有及时关闭，最终使连接池达到最大值！或许微软正是考虑了这个问题，所以创建了枚举CommandBehavior，它允许在后续的代码中关闭SqlDataReader对象时，也一起关闭其关联的SqlConnection对象，使用方法如下：
复制内容到剪贴板 程序代码public static SqlDataReader ExecuteReader(string sql)
{
conn.Open();
SqlCommand cmd = new SqlCommand(sql, conn);
SqlDataReader idr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
//conn.Close();
return idr;
}
一、CommandBehavior.CloseConnection使用示例
复制内容到剪贴板 程序代码using System;
using System.Data;
using System.Data.SqlClient;
namespace ConsoleApplication1
{
class Program
{
/// <summary>
/// 数据库连接串
/// </summary>
static SqlConnection conn = new SqlConnection("server=.;database=zyq;user id=sa;password=sa;min pool size=4;max pool size=100;Connection Lifetime=30;Enlist=true;");
/// <summary>
/// 数据查询
/// </summary>
/// <param name="sql"></param>
/// <returns></returns>
public static SqlDataReader ExecuteReader(string sql)
{
conn.Open();
SqlCommand cmd = new SqlCommand(sql, conn);
SqlDataReader idr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
//conn.Close();
return idr;
}
static void Main(string[] args)
{
SqlDataReader idr = ExecuteReader("Select [Id],[Name] FROM Table1TB");
while (idr.Read())
{
Console.WriteLine(idr["Name"]);
}
idr.Close();//重要
Console.WriteLine(idr.IsClosed);
Console.WriteLine(conn.State.ToString());
Console.ReadKey();
}
}
}
·不带CommandBehavior.CloseConnection时测试结果：
引用内容user1
user2
True
Open
·带CommandBehavior.CloseConnection时测试结果：
引用内容user1
user2
True
Closed
二、其他说明
实际使用中，我们可以用using来使用返回的SqlDataReader对象，这样就不需手动调用Close方法了：
复制内容到剪贴板 程序代码using (SqlDataReader idr = ExecuteReader("Select [Id],[Name] FROM Table1TB"))
{
while (idr.Read())
{
Console.WriteLine(idr["Name"]);
}
}

+ 查看当前日志评论 (0)

登录

────────────

木子屋

PJBlog3 v3.2.9.518 Inside.

Processed In 0.836 ms

返回

标题: CommandBehavior.CloseConnection使用示例

你没有权限发表评论

────────────

木子屋

PJBlog3 v3.2.9.518 Inside.

Processed In 0.836 ms

返回

暂无评论

返回

────────────

木子屋

PJBlog3 v3.2.9.518 Inside.

Processed In 0.867 ms

返回