读书人

怎么写一个判断conn关没关闭的方法啊

发布时间: 2011-12-13 21:22:18 作者: rapoo

如何写一个判断conn关没关闭的方法啊?
1/如何写一个判断conn关没关闭的方法啊?


如果检测没关就conn.close 请问该怎么写这个方法啊


2/还有就是我绑定数据的时候用repeater绑定数据 绑定完了是不是也要 close 啊


3/还有就是我打开网站总提示什么连接池已满,,请问该怎么解决啊


3个问题 100分送上 对不起我问的是3个问题不是一个呵呵 请都回答好么,我是菜鸟呵呵谢谢



[解决办法]
可以通过SqlConnection.State 属性 来查看:

.NET Framework 类库
SqlConnection.State 属性
指示 SqlConnection 的状态。

命名空间:System.Data.SqlClient
程序集:System.Data(在 system.data.dll 中)

ConnectionState 枚举
Broken 与数据源的连接中断。只有在连接打开之后才可能发生这种情况。可以关闭处于这种状态的连接,然后重新打开。(该值是为此产品的未来版本保留的。)
Closed 连接处于关闭状态。
Connecting 连接对象正在与数据源连接。(该值是为此产品的未来版本保留的。)
Executing 连接对象正在执行命令。(该值是为此产品的未来版本保留的。)
Fetching 连接对象正在检索数据。(该值是为此产品的未来版本保留的。)
Open 连接处于打开状态。

[解决办法]
比如:

if (SqlConnection.State != ConnectionState.Closed)
{
SqlConnection.Close();
}
[解决办法]
真快,有没抢上..
[解决办法]

...............
[解决办法]
2/还有就是我绑定数据的时候用repeater绑定数据 绑定完了是不是也要 close 啊

------------------------------------

得到数据集后就可以close了
[解决办法]
关于conn的close的,参考:

SqlConnection conn = new SqlConnection(connStr);
if (conn.State.ToString() == "Closed ") conn.Open();
SqlDataAdapter da = new SqlDataAdapter(SqlStr, conn);
da.Fill(ds, "test01 ");
if (conn.State.ToString() == "Open ") conn.Close();

GridView1.DataSource = ds.Tables[0].DefaultView;
GridView1.DataBind();

[解决办法]
速度太快了,帮顶
[解决办法]
第一个问题前面的人已经答了,我就来回答后面2个

2/还有就是我绑定数据的时候用repeater绑定数据 绑定完了是不是也要 close 啊
※※※※※※※※※※※※※※※※※※※※※※※※※※※※
答:你要关的是数据库链接,而不是repeater

3/还有就是我打开网站总提示什么连接池已满,,请问该怎么解决啊
※※※※※※※※※※※※※※※※※※※※※※※※※
数据库链接池中的最大链接数都是有限的,如果超过这个最大链接数就会出现这个情况,原因很可能是程序只打开数据库链接而没有关闭链接,办法就是每次用完数据库链接以后及时关闭。
[解决办法]
第三个问题不清除,还没遇到过连接池已满的情况,试着给你这个站点单独建立个连接池试试


[解决办法]
顶一下吧,没机会回答了
[解决办法]
用连接对象的STATE属性可以进行判断
[解决办法]
up
[解决办法]
if (conn.State.ToString() == "Open ")

-----------------------
为什么一定要通过字符串来比较呢!
[解决办法]
1、用sqlConnection.State判断是否关闭
2、最好是关闭连接,释放资源
3、可能你的sqlserver设置的连接数太少,而你的连接在使用完后没有被关闭,并且在多个地方打
[解决办法]
if (conn.State != System.Data.ConnectionState.Open)

[解决办法]
其实更好的方法是不用executeReader,改用成SqlDataAdapter来FillDataSet,这样就不存在要显示开关sqlConnection了

[解决办法]
public SqlDataReader proc_read(string sqlstr)
{
SqlConnection conn = new SqlConnection(connection());
SqlCommand cmd = new SqlCommand( "easyproc ", conn);
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter para;
para = cmd.Parameters.Add( "@csql ", SqlDbType.NVarChar, 3000);
cmd.Parameters[ "@csql "].Value = sqlstr;
para = cmd.Parameters.Add( "@total ", SqlDbType.Int);
para.Direction = ParameterDirection.Output;
para = cmd.Parameters.Add( "@retime ", SqlDbType.VarChar, 50);
para.Direction = ParameterDirection.Output;
conn.Open();
return cmd.ExecuteReader(CommandBehavior.CloseConnection);//这里改一下
}


SqlDataReader reader = proc_read(string sqlstr);
...

reader.Close();//这里关闭就可以了

关闭了Reader就可以了.

[解决办法]
ExecuteReader方法中最好加入CommandBehavior.CloseConnection这个参数,这样会很方便的在关闭Reader的时候也把相应的SqlConnection关闭掉.
[解决办法]
试着改一下 LZ的方法

private string connstr = ConfigurationManager.AppSettings[ "databasestr "].ToString();

public DataSet proc_read()
{
SqlConnection conn = new SqlConnection(connstr);
SqlCommand cmd = new SqlCommand( "easyproc ", conn);
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter para;
para = cmd.Parameters.Add( "@csql ", SqlDbType.NVarChar, 3000);
cmd.Parameters[ "@csql "].Value = sqlstr;
para = cmd.Parameters.Add( "@total ", SqlDbType.Int);
para.Direction = ParameterDirection.Output;
para = cmd.Parameters.Add( "@retime ", SqlDbType.VarChar, 50);
para.Direction = ParameterDirection.Output;

SqlDataAdapter dpter=new SqlDataAdapter (cmd,conn);
DataSet ds=new DataSet();
dpter.fill(ds, "TableName ");
return ds;


}

[解决办法]
mark
[解决办法]
if (SqlConnection.State != ConnectionState.Closed)
{
SqlConnection.Close();
}

[解决办法]
同意nayc(不是牛太老,而是草太嫩) 的。

你的问题根本不是是否管理connection造成的。你正在使用着sqlDataReader,却把它的Connection给了别的查询使用。
[解决办法]
应用程序可以多次调用 Close。不会生成任何异常。

所以你可以不去判断是不是还开着……
[解决办法]
我来晚了!
[解决办法]
来晚的多了...
[解决办法]
jf
[解决办法]
接分
[解决办法]
private void Open()
{
// 打开数据库连接
if(con == null)


{
con = new SqlConnection(ConfigurationManager.ConnectionStrings[ "SQLCONNECTIONSTRING "].ConnectionString);
}

if(con.State == ConnectionState.Closed)
{
try
{
///打开数据库连接
con.Open();
}
catch(Exception ex)
{
SQLHelper.CreateErrorMsg(ex.Message);
}
finally
{
///关闭已经打开的数据库连接
}
}
}

读书人网 >asp.net

热点推荐