sqlconnection关闭的时机,请问大家?
//添加按钮
public void AddClick(object sender,EventArgs e)
{
string filename= " ";
try
{
AddData(ywkind,filename);//调用添加方法
complainDescriptionTxt.Text= " ";
yeWuAdviceTxt.Text= " ";
}
catch(Exception ex)
{
string errMsg= "System is wrong,it is "+ex.Message;
errMsg = errMsg.Replace( "\r\n ", "\\r\\n ");
errMsg = errMsg.Replace( " ' ", "\\ ' ");
Response.Write(@ " <script> alert( ' "+errMsg+ " '); </script> ");
}
}
//添加方法
void AddData(string ywid,string filename)
{
string connstr=ConfigurationManager.AppSettings[ "connectionStr "];
SqlConnection con=new SqlConnection(connstr);
con.Open();//打开
SqlCommand cmd=new SqlCommand( "v3QCDataAdd ",con);
cmd.CommandType=CommandType.StoredProcedure;
SqlParameter lastedid=new SqlParameter( "@lastedid ",SqlDbType.VarChar,20);
……
cmd.ExecuteNonQuery();
con.Close();//关闭
}
当我将第一次资料添加到数据时,即点击添加按钮后(输入窗口不关闭),再次填写数据点击添加时,此时数据是没有进入数据库里的,也不报错,为什么?我估计是sqlconnection关闭了,但是这个sqlconnection在什么时候关闭才好呢?因为打开sqlconnection多了,数据库连接经常会超时连接不进去。
------解决方案--------------------你不是创建了一个新的实例并且打开了么?跟以前的连接“关闭了”没有关系。
你这里的问题纯粹是让人猜测错误语句在哪里,无法回答。你应该自己调试,单步跟踪执行和分析堆栈、变量,然后根据你调试结果来提问比较准确。
如果AddData负责打开连接,那么就应该负责关闭连接。你的程序只是初步达到了这个要求,当出现异常的时候,还不能确保关闭con连接,所以还不是很准确的。确保关闭连接,要使用finally或者using那样的结构化关键字来保证dispose或者close的执行。
如果AddData不负责打开连接,就不应该在内部负责创建和打开连接。
不要写出只管打开连接但是不负责关闭连接的方法,那才是造成“打开sqlconnection多了”的祸根。
------解决方案--------------------如果AddData不负责打开连接,就不应该在内部负责创建和打开连接。
--> 如果AddData不负责打开连接,就不应该在内部负责关闭连接。
如果你使用DW写代码,那么你就要写程序去打印每一步的状态。你使用什么工具,都要调试。只是调试能力的高低不同而已。如果你没有抱着通过调试来自己发现底层机制的目的去开发程序,那么写程序就永远是业余的。