问题描述
做了个登录窗口,登录成功后打开主窗口主窗口Form_main这么写的:privatevoidForm_main_Load(objectsender,EventArgse){Form_loginlogin=newForm_login();login.ShowDialog();}
登录窗口Form_login中这么写的:privatevoidForm1_Load(objectsender,EventArgse){}privatevoidbutton1_Click(objectsender,EventArgse){stringdatasource,catalog,userid,passwd;datasource=textBox1.Text;catalog=textBox2.Text;userid=textBox3.Text;passwd=textBox4.Text;stringconStr=@"DataSource="+datasource+";InitialCatalog="+catalog+";UserId="+userid+";Password="+passwd+";";SqlConnectionconnection=newSqlConnection(conStr);try{connection.Open();MessageBox.Show("Sql连接成功!","恭喜",MessageBoxButtons.OK,MessageBoxIcon.Information);this.Close();}catch(Exception){MessageBox.Show("Sql连接失败,请检查设置参数与网络连接!","警告",MessageBoxButtons.OK,MessageBoxIcon.Warning);}finally{SqlConnection.ClearPool(connection);}}
有几个疑问:1.SQL登录成功之后,关闭LOGIN窗口,SQL的连接是否还存在?我在主窗口执行SQL操作是否还需要重新连接?2.finally里面到底该用connection.close();还是connection.dispose();还是clearpool(connection)?正规写法是怎样的?2.这些代码在VS2010执行没有问题,但是到VS2013上执行,LOGIN窗口中SQL不管登录是否成功都直接跳出main窗口,没有任何messagebox弹出,跳出main窗口后,login窗口也不自己关闭。这VS2013是什么情况?
解决方案
解决方案二:
1.没了,关闭之后资源就释放了。你可以传参,将连接传回去。2.一般断开连接我用connection.close();我也不知道是不是正规=。=3.connection.Open();加断点F10调试一下。
解决方案三:
关闭后login窗体的connection就访问不到了,你可以将连接放到一个全局变量
解决方案四:
按理以上代码在2013里不会有问题,你单步调试看有没有异常断开连接一般用connection.close()就可,
解决方案五:
以前写的一个帮助类,楼主可以看看增删改查的usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Data;usingSystem.Data.SqlClient;namespaceMyCinemalDal{classDBHelper{stringstrConn="uid=账号;pwd=密码;database=数据库;server=服务器";//SQLServer链接字符串SqlConnectionConnSql=newSqlConnection(strConn);//Sql链接类的实例化ConnSql.Open();//打开数据库stringstrSQL="SELECT*FROM表名1";//要执行的SQL语句SqlDataAdapterda=newSqlDataAdapter(strSQL,ConnSql);//创建DataAdapter数据适配器实例DataSetds=newDataSet();//创建DataSet实例da.Fill(ds,"自定义虚拟表名");//使用DataAdapter的Fill方法(填充),调用SELECT命令ConnSql.Close();//关闭数据库//定义连接字符串privatestaticstringConnString="DataSource=(登录数据库的名字默认是.);InitialCatalog=MyForum(数据库名字);IntegratedSecurity=True";//参数形式额sql语句stringsql="select*fromUserwherename=@name";//SqlParameter[]paras=newSqlParameter{newSqlParameter("@name",value)};//执行增删改publicstaticintExecCommand(stringsql,SqlParameter[]paras){//高效using语句using(SqlConnectioncon=newSqlConnection(ConnString)){SqlCommandcmd=newSqlCommand();//追加参数AppendParams(con,cmd,paras,sql);intcount=cmd.ExecuteNonQuery();returncount;}}//追加参数的通用方法publicstaticvoidAppendParams(SqlConnectioncon,SqlCommandcmd,SqlParameter[]paras,stringsql){cmd.Connection=con;cmd.CommandText=sql;if(paras!=null){foreach(SqlParameterpinparas){cmd.Parameters.Add(p);}}}//执行查询publicstaticSqlDataReaderExecSelect(stringsql,SqlParameter[]paras){SqlConnectioncon=newSqlConnection(ConnString);SqlCommandcmd=newSqlCommand();//追加参数AppendParams(con,cmd,paras,sql);SqlDataReadersr=cmd.ExecuteReader(CommandBehavior.CloseConnection);returnsr;}}}//调用读取using(SqlDataReaderreader=DBHelper.ExecSelect()){while(reader.Read()){Moviemovie=newMovie();movie.Id=Convert.ToInt32(reader["Id"]);movie.MovieCode=(string)reader["MovieCode"];movie.Category=newCategoryManager().GetCategoryById((int)reader["categoryid"]);movie.Title=(string)reader["Title"];movie.Director=(string)reader["Director"];movie.DateReleased=(DateTime)reader["DateReleased"];list.Add(movie);}//必须先关闭DataReader对象才能取出输出参数的值reader.Close();}
解决方案六:
1:关闭后SQL的连接就不存在了2:我一般用close()3:没用过vs2013
解决方案七:
1.关闭窗口就释放了链接了,那也就谈不上操作主窗口了,你可以把login窗口隐藏;2.一般finally用的是dispose,正规点的是自己写个类,每次调用链接完都close;3.这个应该是你的登陆判断本来就有问题,你自己检查下;
解决方案八:
登录的话,在Program.cs里写比较合适staticvoidMain(){Application.EnableVisualStyles();Application.SetCompatibleTextRenderingDefault(false);Application.Run(newLogin());if(Login.LoginOK){Application.Run(newASKME_main());}elseApplication.Exit();}
解决方案九:
引用7楼huang369509940的回复:
登录的话,在Program.cs里写比较合适staticvoidMain(){Application.EnableVisualStyles();Application.SetCompatibleTextRenderingDefault(false);Application.Run(newLogin());if(Login.LoginOK){Application.Run(newASKME_main());}elseApplication.Exit();}
Login里有publicstaticboolLoginOK=false;然后SqlConnectionconnection=newSqlConnection(conStr);try{connection.Open();MessageBox.Show("Sql连接成功!","恭喜",MessageBoxButtons.OK,MessageBoxIcon.Information);LoginOK=true;this.Close();}
参考http://www.cnblogs.com/sayu115/archive/2007/09/29/910656.html
解决方案十:
直接用数据库处理类,在界面调用它的方法比较好