码迷,mamicode.com
首页 > Web开发 > 详细

ADO.NET开发技巧(3)-执行命令初步

时间:2015-06-01 11:19:39      阅读:138      评论:0      收藏:0      [点我收藏+]

标签:

非常好,新兵,我们已经成功连接到了数据库,接下来,我们就可以让数据库执行我们的命令了,也就是,可以开始大干一场了。哦,当然,你还得知道如何让数据库执行命令。如果没掌握好技巧而弄巧成拙的话,异常大军会马上赶过来并杀死你的。

一旦SqlConnection类使用了open方法,那么,就代表我们已经连接到了数据库,哦,等等,这是….异常大军!笨蛋,你连接字符串拼错了!怎么办?别慌,下士,microsoft送给我们的工具箱还没用呢,让我打开看看,哦,这是try-catch-finally。另一个是using,对付他们简直绰绰有余。

cry-catch-finally是一种可以捕获异常并处理的语法。话不多说,先看看微软使用说明书上是如何使用它的:

              try {
                    conn.Open();
                    //做一些事情
                }
                catch(Exception) {

                    throw;
                }
                finally {
                    conn.Close();
                    conn.Dispose();
                }

我们首先在try块内打开连接,这样的话,如果有异常抛出,那么我们就可以捕获它到catch块中,并且可以判断这是一个什么异常,并写上处理代码。最后finally语句块内的东西是不管上面执行的结果怎么样,它都会最后执行的,在这里,我们选择让它关闭数据库和释放资源。

你很可能会奇怪,我们为什么要手动释放资源,我们不是有微软提供的GC神器么。很遗憾地告诉你,GC神器无法自动回收这个SqlConnection对象,不过微软提供了另一套机制来实现自动释放,那就是IDispose接口。只要是实现了这个接口的对象,就可以通过using关键字来自动释放:

using(SqlConnection co = new SqlConnection()) {
                    //执行一些命令
                    co.Open();

                }

是的,在using语句内初始化实现了IDispose接口的类都可以自动释放的。

好了,之后便让我们开始执行命令吧!

我们的第一步就是创建命令:

using(SqlConnection co = new SqlConnection()) {
                    //执行一些命令
                    co.Open();

                    using(SqlCommand cmd = co.CreateCommand()) {
                        cmd.CommandText = "insert into Task(tID,tTitle) values(546,‘开会‘)";
                        cmd.CommandType = CommandType.Text;
                        
                    }

                }

其中Type类型是指我们要执行的命令是sql命令(Text)还是存储过程。它默认是Text,所以其实我们没有必要指定它。

好了,接下来是执行命令的函数,我们有四个执行命令的函数

cmd.ExecuteNonQuery();
cmd.ExecuteScalar();
cmd.ExecuteXmlReader();
cmd.ExecuteReader();
第一个是执行非查询命令的函数,它返回一个int类型,代表几行受影响,如(insert,update,delete)
第二个是执行单个查询的函数,它返回查询结果中的第一行第一列,如:
cmd.CommandText = "select tName from Task where tID = 1";
                        string tName = cmd.ExecuteScalar() as string;

第三个返回一个SqlXmlReader,我们可以使用处理Dom的方式处理这些数据,但是这涉及到更多的知识了,所以一般不实用这个。

第四个返回一个SqlDataReader对象,它适合任意查询命令。主要是依靠read函数来读取数据。每次调用一次read,他就会指到数据的下一行。

具体使用方法如下:

using(var reader = cmd.ExecuteReader()) {
                            while(reader.Read()) {
                                var tN = (string)reader["tName"];
                                var tID = (int)reader["tID"];
                            }
                        }
顺便一提,上面这些东西都有异步版本,也就是我们只要加上await/async关键字就可以异步执行命令了,简直不能太给力啊!

ADO.NET开发技巧(3)-执行命令初步

标签:

原文地址:http://www.cnblogs.com/blackerXHunter/p/4543363.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!