c#基础之异常处理及自定义异常 从SQLServer转储数据到MySQL
一、什么是c#中的异常?
异常是程序运行中发生的错误,异常处理是程序的一部分。c#中的异常类主要是直接或者间接的派生于 System.Exception类 ,也就是说System.Exception类是所有预定义的系统异常的基类。错误的出现并不总是编写应用的程序员的原因,有的时候应用程序也会因为终端用户的操作不当而发生错误。无论如何,在编写程序前都应该预测应用程序和代码中出现的错误。
二、常见的异常都有哪些?
① ArrayTypeMismatchException
向数组中存数据时,存入的数据与数组定义的数据类型不同的时候便会出现该异常
② DivideByZeroException
用零除整数时引发该异常
③ IndexOutOfRangeException
数组越界异常
④ NullReferenceException
对象引用为空异常
⑤ OverflowException
算数运算溢出
⑥ InvalidCastException
运行时强制转换无效异常
三、异常处理
使用如下代码结构来捕获和处理异常
try{
//try块中包含容易产生异常的代码
}
catch{
//异常处理代码
}
finally{
//用于消除try块中分配的任何资源
//以及即使发生异常也需要继续运行的代码
}
其中finally代码块是try-catch结构执行完成后,无论是否发生异常,finally代码块都会执行。即便是写代码时在try-catch结构里return了,仍旧是会执行了finally代码块之后再去return。
接下来看一个简单的异常捕获及处理的例子:

1 public class MyException 2 { 3 public static void Main() 4 { 5 try 6 { 7 A(); 8 B(); 9 C(null); 10 } 11 //捕获A,B,C方法抛出的异常 12 catch (Exception ex) 13 { 14 //打印出异常信息 15 Console.WriteLine(ex); 16 Console.ReadKey(); 17 } 18 } 19 20 static void A() 21 { 22 // throw语法. 23 try 24 { 25 //引发零除异常 26 int value = 1 / int.Parse("0"); 27 } 28 catch 29 { 30 //捕获到异常不做处理继续抛出异常 31 throw; 32 } 33 } 34 35 static void B() 36 { 37 // 过滤异常类型. 38 try 39 { 40 int[] array = new int[]{ 1, 2, 3 }; 41 //引发数组越界异常 42 array[6] = 4; 43 } 44 //捕获到数组越界异常 45 catch (IndexOutOfRangeException ex) 46 { 47 //抛出数组越界异常 48 throw ex; 49 } 50 } 51 52 static void C(string value) 53 { 54 // 创建新的异常. 55 if (value == null) 56 { 57 //抛出新的异常 58 throw new ArgumentNullException("value"); 59 } 60 } 61 }

值得一提的是推荐使用throw来抛出异常。因为throw ex会将到现在为止的所有信息清空,认为你catch到的异常已经被处理了,只不过处理过程中又抛出新的异常,从而找不到真正发生异常的代码位置。
四、自定义异常
自定义异常应该具有以下三个特征:
① 继承自System.ApplicationException类,并且使用Exception作为自定义异常类名的结尾
② 包含三个构造函数:一个无参构造函数;一个字符串参数的构造函数;一个字符串参数,一个内部异常作为参数的构造 函数
③ 抛出自定义异常:throw new MyException(); 捕获自定义异常:Catch(MyException){ }
举个例子:

1 public class MyException : ApplicationException 2 { 3 private string error; 4 private Exception innerException; 5 //无参数构造函数 6 public MyException() 7 { 8 9 } 10 //带一个字符串参数的构造函数 11 public MyException(string msg) 12 { 13 error = msg; 14 } 15 //带有一个字符串参数和一个内部异常信息参数的构造函数 16 public MyException(string msg, Exception exception) 17 { 18 innerException = exception; 19 error = msg; 20 } 21 public string GetError() 22 { 23 return error; 24 } 25 }

五、总结
异常处理的优势:
对用户来说,在程序发生错误时,不至于程序崩溃,而可以给出提示信息,提升用户的使用体验
对开发人员来说,可以在短时间内找到程序发生错误的位置,进而提高效率
前一段时间,由于项目需要将数据库从SQLServer迁移到MySQL,在网上百度了很久,基本都是通过SQLyog实现的。其实使用平时常用的数据库管理软件Navicat Premium也能做到,并且操作简便。
接下来我介绍一下具体的操作流程
1、首先安装MySQL和Navicat Premium数据库管理软件
2、使用NaVicat Premium连接本地MySQL数据库
3、新建要导入数据的数据库此处我的数据库名为AlphaGo
4、在要导入数据的数据库表上右键选择导入向导,选择ODBC点击下一步
5、数据链接属性选择Microsoft OLE DB Provider for SQL Server点击下一步
6、输入连接到SQLServer数据库的连接信息,并勾选允许保存密码,然后点击确定。此处我连接本地的SQLServer数据库
7、选中要导入到MySQL的表点击下一步
8、此时可以修改导入后的对应表名,此处不做修改,点击下一步
9、此处可以修改具体每个表的字段类型,此处不做修改,点击下一步
10、默认选中添加记录到目标表,点击下一步
11、点击开始,查看提示信息如图,数据导入成功
c#基础之异常处理及自定义异常 从SQLServer转储数据到MySQL的更多相关文章
- 从SQLServer转储数据到MySQL
前一段时间,由于项目需要将数据库从SQLServer迁移到MySQL,在网上百度了很久,基本都是通过SQLyog实现的.其实使用平时常用的数据库管理软件Navicat Premium也能做到,并且操作 ...
- SQLServer导出数据到MySQL
1从SQLServer导出数据 执行BCP: bcp "..." queryout "F:\test.txt" -c –S1.2.3.4 -Usa -P1111 ...
- c#基础之异常处理及自定义异常
一.什么是c#中的异常? 异常是程序运行中发生的错误,异常处理是程序的一部分.c#中的异常类主要是直接或者间接的派生于 System.Exception类 ,也就是说System.Exception类 ...
- SqlServer导入数据到MySql
1.下载MySql ODBC Driver并进行安装.例如我下载的这个安装包是mysql-connector-odbc-5.1.6-win32.msi. 2.装完后,添加odbc数据源: 3.在sql ...
- sqlserver把数据导入mysql
sqlserver库 navicat逆向表到模型 转换模型为... 选择mysql 建模转换后导出sql 导出sql后,再mysql库中执行该sql(该sql为表结构)执行sql后,使用navicat ...
- sqlserver导入数据到mysql的详细图解
SQL Server 迁移数据到MySQL 一.背景 由于项目开始时候使用的数据库是SQL Server,后来把存储的数据库调整为MySQL,所以需要把SQL Server的数据转移到MySQL:由于 ...
- scrapy基础知识之将item 通过pipeline保存数据到mysql mongoDB:
pipelines.py class xxPipeline(object): def process_item(self, item, spider): con=pymysql.connect(hos ...
- Python 基础之 异常处理
python 基础之异常处理 说到异常处理,就得先问一下,什么是异常处理? 先来看一下,什么是异常? 异常就是:程序运行时发出的错误的信号. 异常的种类先来看一下: 一.常见的异常 Attribut ...
- Springboot的异常处理与自定义异常
园友们好,元旦很快就到来了,提前祝各位园友们元旦快乐,今天给大家分享一个工作中必用一个知识点,就是使用枚举构建自定义异常并应用于springboot的异常处理器.开始之前我先把这个案例的结构大致说明一 ...
随机推荐
- 数学图形之Breather surface
这是一种挺漂亮的曲面图形,可惜没有找到太多的相关解释. In differential equations, a breather surface is a mathematical surface ...
- Java主流Web Service框架介绍:CXF和Axis2
CXF和Axis2是目前java平台上最主流的两个框架,虽然两个项目都隶属ASF,但却是基于不同思想和风格实现的,因此也各有所长. CXF:http://cxf.apache.org/ 是由过去的 ...
- Linux c 屏蔽信号、切换信号
信号导致的问题 不是任何信号我们都需要的,如果遇到我们不想处理的信号,我们怎么避免这个信号? 1. 信号屏蔽 intsigprocmask(int how,//操作方式 SIG_BLOCK屏 ...
- 转: MAC认证码的说明
转: http://blog.sina.com.cn/s/blog_4940e1fc01012vk3.html MAC(Message Authentication Code) 消息认证码(带密钥的H ...
- Android Studio 3.0 下载 使用新功能介绍
谷歌2017发布会更新了挺多内容的,而且也发布了AndroidStudio3.0预览版,一些功能先睹为快.(英语一般,有些翻译不太好) 下载地址 https://developer.android.g ...
- IETESTER ie10.local 下载
下载地址:ietester.ie10.exe.local.zip 技术交流QQ群: 15129679
- Discuz常见大问题-如何允许用户插入视频-如何自己在页面中插入视频
从视频的下面分享中获取html代码 然后粘贴到你创建页面的指定位置(注意从优酷复制的视频宽度和高度可能比较小,你可以自己调整,或者占据100%) 最终的实现效果
- ionic3打包失败的解决办法
使用命令行: $ ionic cordova build android --release 打包android的时候,提示生成失败,原因是没有找到gradle,我的电脑因为安装了Android St ...
- Swift 2 语言精要 - Initialization and Deinitialization
init相当于构造函数 deinit相当于析构函数 class InitAndDeinitExample { // Designated (i.e., main) initializer init ( ...
- uni-app 生命周期
生命周期分为:页面生命周期和应用生命周期 生命周期可参考:uni-app官方API 注意平台支持,仅某个平台支持会显示,5+App是超HTML5+的App方案. 例如分享:只有小程序支持.这时我们就要 ...