C# 怎样判断数据连接是否真正的成功了?

来源:百度知道 编辑:UC知道 时间:2024/06/21 11:34:49
string userName = txtUserName.Text.Trim(); //取得用户名
string userPwd = txtPassword.Text.Trim(); //取得用户密码
DBHelper.connString += "User ID=" + userName + ";Pwd=" + userPwd;//注:程序前面已取得服务器名称
bool success = true;
try
{
DBHelper.con.Open();
}
catch (Exception ex)
{
success = false;
MessageBox.Show(ex.Message);
}
finally
{
DBHelper.con.Close();
}
if (success)
{
MessageBox.Show("成功连接了!!");
this.Close();
}

//程序到这儿呢, 也还是不报错, 捕捉不到错误, 提示成功.
//但关键是到了此窗口关闭了, 进入到下一个窗口, 要加载实际的数据库里面的表时, 就出错了.
/

因为你在 finally 里面关闭了又
不管是否出异常,finally里面的代码都是肯定会执行的
于是乎。。。你用 DBHelper.con.Close() 又给关掉了!。。。杯具哦

那就需要看,你在下个页面是怎么写的吧?
你这样测试,只能说你当前是没有错误的

你用一个简单的SqlConnection试试,没有catch只是表明DbHelper.Con连接上了。
也许你认为你通过connString进行连接,但假设connString是个字段,con也是个SqlCOnnection类型的字段,只为connString赋值是不可能把连接字符串传给con的。
这样只有一种可能,con是在别的地方获得了连接字符串,然后你连接上,又把它关闭了。要证明这种假设只要把数据库的sa密码改掉,再试试,肯定报错。

这个错误的根本原因是你把两个不相关的对象connString和con耦合在一个类中。

另外C#之所以不顾多人反对加入【属性】这个概念就是为了封装字段,记住这样一点:字段永远是私有的。
如果你有不良的编程习惯可以用TeamSystem的VS,对项目执行【运行代码分析】,仔细复查每个警告。根据我的经验,几乎所有的警告都可以避免的。

关键要看,你DBHelper中是怎么写的,你定义的连接是不是静态的,不然的话,在一个在不同的页面,是不能共享一个连接的
public static string connString = "Data Source=FLOWER\\YNG";
少了一个分号应改为
public static string connString = "Data Source=FLOWER\\YNG;";
你确定这个连接字符串正确的吗?
有一种写法
server=服务器名;uid=sa;pwd=密码;database=数据库名