异常处理

          我们的程序不知道会什么时候会出现问题,我们要对程序做一些处理,即使出错了也要给用户一个比较友好的提示,不能把错误抛给用户。异常处理就是在你认为有可能出问题的地方对问题进行事先处理。

          比如我们打开数据库的时候,有可能是因为网络原因打不开,打开文件失败,等等,这些都是可能发生的。在可能发生错误的地方,进行处理这个主要靠 try catch 的语法来进行。try就是尝试做什么,catch就是要捕获可能发生的错误 如果try语句中没有错误的话,就不会执行catch ,如果有错就可以在catch中进行处理了,但这个带来一个新的问题 ,我们捕获异常后,如果只提示这个,这个错误实际的原因就找不到了 ,对于我们自己排查错误就有点麻烦了 ,所以我们给用户看的是友好的提示 ,我们自己还要留下原先的错误信息,方便排查错误 ,这就要用到日志功能了 。我们要把程序真正的错误信息写到日志里去 ,try还有一个语句块 ,叫finnaly  这个主要是为了保证你有机会做一些后续的处理。

 try
            {
                con = new SqlConnection();
                con.ConnectionString = @"packet size=4096;user id=sa;Connection Timeout=150;Max Pool size=1500;data source=a ;persist security info=True;initial catalog=a;password=a";
                con.Open();

                SqlCommand cmd = new SqlCommand();
                cmd.CommandText = string.Format("select ..{0}.{1}.'",a,b);
                cmd.Connection = con;
                count = cmd.ExecuteScalar();
            }
            catch (Exception ee) //Excetion 这个类是C#提供的异常类,先知道就可以了,后面我们讲继承的时候就会知道它是所有异常类的基类。
            {
                string message = ee.Message;//这个就是真的错误信息。
                //异常对象中有3个重要的属性 
                //ee.Message;这个是错误信息
                //ee.StackTrace;这个是错误的堆栈,可以看出是那个语句错了
                //ee.InnerException;这个是看它是否有内部异常,后续再看这个问题吧。

                //写日志,我们一般是要写到一个日志文件中,这个需要操作文件,后续我们再说把,比如有一个LogHelper的类
                //LogHelper.Write(ee.Message); 类似这样就可以了,出了问题就看日志。
                MessageBox.Show("连接数据库出错了,请进行检查!");
                return;
            }
            finally//最后不管是否发生异常,该一句一定会执行的
            {
                //如果数据库连接是打开的在这里关闭,避免连接泄露。连接泄露这个后面给你讲,你就知道数据库连接是很宝贵的资源,用完必须关闭。否则你的程序就会很慢。

                if (con.State == ConnectionState.Open)
                {
                    con.Close();
                }
                MessageBox.Show("一定会执行的");
            }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值