Command对象的常用方法

说明:上篇总结了Command对象的几个数据成员,这节总结Command对象的常用方法。

  同样,在不同的数据提供者的内部,Command对象的名称是不同的,在SQL Server Data Provider里叫SqlCommand,而在OLE DB Data Provider里叫OleDbCommand。

下面将详细介绍Command类型对象的常用方法,包括构造函数、执行不带返回结果集的SQL语句方法、执行带返回结果集的SQL语句方法和使用查询结果填充DataReader对象的方法。

    1.构造函数

构造函数用来构造Command对象。对于SqlCommand类型的对象,其构造函数说明如表 2-6所示。

函数定义

参数说明

函数说明

SqlCommand()

不带参数

创建SqlCommand对象

SqlCommand(string cmdText)

cmdText: SQL 语句字符串

根据SQL语句字符串,创建SqlCommand对象

SqlCommand(string cmdText, SqlConnection connection)

cmdText: SQL 语句字符串

connection: 连接到的数据源

根据数据源和SQL语句,创建SqlCommand对象

SqlCommand(string cmdText, SqlConnection connection,  SqlTransaction transaction)

cmdText: SQL语句字符串

connection: 连接到的数据源

transaction: 事务对象

根据数据源和SQL语句和事务对象,创建SqlCommand对象

(1) 第一个构造函数不带任何参数

  SqlCommand  cmd=newe SqlCommand();

  cmd.Connection=ConnectionObject;
 
string CommandText=" select *from studentInfo "; cmd.CommandText=CommandText;

上面代码段使用默认的构造函数创建一个SqlCommand对象。然后,把已有的Connection对象ConnectionObject和命名文本CommandText分别赋给了Command对象的Connection属性和CommandText属性。

除此之外,许多关系型数据库,例如SQL Server 和Oracle,都支持存储过程。可以把存储过程的名称指定为命名文本。例如,使用编写 GetAllStudent存储过程为命名文本:

string CommandText=" GetAllStudent ";

cmd.CommandType=CommandType.StoredProcedure;
cmd.CommandText=CommandText;

(2) 第二个构造函数可以接受一个命令(SQL)文本

 string CommandText=" select *from studentInfo "; 

  SqlCommand  cmd=newe SqlCommand(CommandText);

  cmd.Connection=ConnectionObject;

上面的代码实例化了一个Command对象,并使用给定命令文本对Command对象的CommandText属性进行了初始化。

然后,使用已有的Connection 对象对Command对象的Connection属性进行了赋值。(这种方法在上一篇说过,不建议使用,使用最多的是下面的方法)

(3) 第三个构造函数接受一个Connection和一个命名文本

  SqlCommand  cmd=newe SqlCommand(CommandText, ConnectionObject);

注意这两个参数的顺序,第一个为string类型的命令文本,第二个为Connection对象。

(4) 第四个构造函数接受三个参数,第三个参数是SqlTransaction对象,这里不做讨论。

另外,Connection 对象提供了CreateCommand方法,该方法将实例化一个Command对象,并将其Connection属性赋值为建立该Command对象的Connection对象。

无论在什么情况下,当把Connection对象赋值给Command对象的Connection属性时,并不需要Connection对象是打开的。但是,如果连接没有打开,则在命令执行之前必须首先打开连接。

而对于OleDbCommand类型的对象,其构造函数如下表所示。同样可以看出,它们和SqlCommand类的构造函数非常相似。

函数定义

参数说明

函数说明

OleDbCommand()

不带参数

创建OleDbCommand对象

OleDbCommand(string cmdText)

cmdText: SQL语句字符串

根据SQL语句字符串,创建OleDbCommand对象

OleDbCommand(string cmdText,OleDbConnection connection)

cmdText: SQL语句字符串

connection:连接到的数据源

根据数据源和SQL语句,创建OleDbCommand对象

OleDbCommand(stringcmdText, OleDbConnection connection ,

OleDbTransaction transaction)

cmdText: SQL语句字符串

connection:连接到的数据源

transaction:事务对象

根据数据源和SQL语句和事务对象,创建OleDbCommand对象

命令对象构造完成后,就可以执行命令对数据库进行操作了。命令对象所提供的用于执行命令的方法有很多种,具体使用哪个方法取决于命令的执行结果返回什么样的数据。

SqlCommand 提供了4个执行方法:ExecuteNonQuery()、ExecuteScalar()、ExecuteReader()、ExecuteXmlReader()。

详细见下面相关部分。

命令对象提供的用于执行命令的方法及其含义如表

方法

含义

Cancel

试图取消命令的执行

ExecuteNonQuery

对连接执行SQL语句并返回受影响的行数

ExecuteReader

执行查询,将查询结果返回到数据读取器(DataReader)中

ExecuteScalar

执行查询,并返回查询所返回的结果集中第一行的第一列。忽略额外的列或行

ExecuteXmlReader

执行查询,将查询结果返回到一个XmlReader对象中

  

 

2.ExecuteNonQUery方法

ExecuteNonQuery方法用来执行Insert、Update、Delete等非查询语句和其他没有返回结果集的SQL语句,并返回执行命令后影响的行数。

如果Update和Delete命令所对应的目标记录不存在,返回0。如果出错,返回-1。

String cnstr="server=(local);database=student; Integrated Security=true";

SqlConnection cn=new SqlConnection(cnstr);

cn.Open();

string sqlstr="update student set  name='Jone' where name='Bill' ";

SqlCommand cmd=new SqlCommand(sqlstr, cn);

cmd.ExecuteNonQuery();

cn.Close();

3.ExecuteScalar()方法

在许多情况下,需要从SQL语句返回一个结果,例如客户表中记录的个数,当前数据库服务器的时间等。

ExecuteScalar方法执行一个SQL命令,并返回结果集中的首行首列(执行返回单个值的命令)。如果结果集大于一行一列,则忽略其他部分。

  根据该特性,这个方法通常用来执行包含Count、Sum等聚合函数的SQL语句。

下面的代码读取数据库中表student的记录个数,并把它输出到控制台上。

String cnstr="server=(local);database=student; Integrated Security=true";

SqlConnection cn=new SqlConnection(cnstr);

cn.Open();

string sqlstr="select count(*) from student";

SqlCommand cmd=new SqlCommand(sqlstr, cn);

object count=cmd.ExecuteScalar();

Console.WriteLine(count.ToString());

cn.Close();

ExecuteScalar()方法的返回值类型是Object,根据具体需要,可以将它转换为合适的类型。

    4.ExecuteReader()方法

    ExecuteReader()方法执行命令,并使用结果集填充DataReader对象。

    ExecuteReader()方法用于执行查询操作,它返回一个DataReader对象,通过该对象可以读取查询所得的数据。

    ExecuteReader()方法在Command对象中用得比较多,通过DataReader类型的对象,应用程序能够获得执行SQL查询语句后的结果集。

  该方法的两种定义为:

       †ExecuteReader(),不带参数,直接返回一个DataReader结果集。

†   ExecuteReader(CommandBehavior behavior),根据behavior的取值类型,决定DataReader的类型。

  如果behavior取值是CommandBehavior.SingleRow这个枚举值,则说明返回的ExecuteReader只获得结果集中的第一条数据。

    如果取值是CommandBehavior.SingleResult,则说明只返回在查询结果中多个结果集里的第一个。

  一般来说,应用代码可以随机访问返回的ExecuteReader列,

  但如果behavior取值为 CommandBehavior.SequentialAccess,则说明对于返回的ExecuteReader对象只能顺序读取它包含的列。

  也就是说,一旦读过该对象中的列,就再也不能返回去阅读了。这种操作是以方便性为代码换取读数据时的高效率,需谨慎使用。

String cnstr="server=(local);database=student; Integrated Security=true";

SqlConnection cn=new SqlConnection(cnstr);

cn.Open();

string sqlstr="select * from student";

SqlCommand cmd=new SqlCommand(sqlstr, cn);

SqlDataReader dr=cmd.ExecuteReader();//建立SqlDataReader 对象

while(dr.Read())//循环输出每一条记录

{

    String name=dr["姓名"].ToString();//读取姓名子段

    Console.WriteLine(name);//控制台输出

}

dr.Close();//关闭结果集

cn.Close();//关闭数据库连接

这段代码从数据库的student表中读取全部数据,并把该表的“姓名”字段的数据全部输出到控制台上。

ExecuteXmlReader 

SqlCommand特有的方法,OleDbCommand无此方法。该方法执行将返回XML字符串的命令。它将返回一个包含所返回的XML的System.Xml.XmlReader对象。

C#与数据库访问技术总结(五)之Command对象的常用方法的更多相关文章

  1. c# 窗体开发4 数据库访问技术

    ADO.NET的名称起源于ADO(ACTIVEX DATA OBJECTS) USING SYSTEM; USING SYSTEM.COLLECTIONS.GENERIC; USING SYSTEM. ...

  2. C#-数据库访问技术 ado.net——创建 数据库连接类 与 数据库操作方法 以及简单的数据的添加、删除、修改、查看

    数据库访问技术 ado.net 将数据库中的数据,提取到内存中,展示给用户看还可以将内存中的数据写入数据库中去 并不是唯一的数据库访问技术,但是它是最底层的数据库访问技术 1.创建数据库,并设置主外键 ...

  3. C#与数据库访问技术总结(十八)

    ADO.NET 代码综合示例 前面已经介绍过OLE DB.NET和SQL Server.NET数据提供者可以用来连接不同的数据源. 以下代码不仅综合演示了使用ADO.NET的这两种数据提供者访问数据库 ...

  4. C#与数据库访问技术总结(十五)之 DataAdapter对象代码示例

    DataAdapter对象代码示例 下面的代码将说明如何利用DataAdapter对象填充DataSet对象. private static string strConnect=" data ...

  5. 数据库访问技术 odbc dao rdo uda jet oledb

    一.UDA(UniversalDataAccess) 这是微软提供的通用数据访问策略.包括ADO.OLEDB和ODBC.它不光提供了数据库的访 问能力,对于其它的数据存储技术也同样支持,如目录服务.E ...

  6. C#与数据库访问技术总结(七)综合示例

    综合示例 说明:前面介绍了那么多,光说不练假把式,还是做个实例吧. 表:首先你要准备一张表,这个自己准备吧.我们以学生表为例. 1.ExecuteScalar方法 ExecuteScalar方法执行返 ...

  7. C#与数据库访问技术总结(十七)

    使用DataSet对象访问数据库 当对DataSet对象进行操作时,DataSet对象会产生副本,所以对DataSet里的数据进行编辑操作不会直接对数据库产生影响,而是将DataRow的状态设置为ad ...

  8. C#与数据库访问技术总结(十六)之 DataSet对象

    DataSet对象 DataSet对象可以用来存储从数据库查询到的数据结果,由于它在获得数据或更新数据后立即与数据库断开,所以程序员能用此高效地访问和操作数据库. 并且,由于DataSet对象具有离线 ...

  9. C#与数据库访问技术总结(十四)之DataAdapter对象

    DataAdapter对象 DataAdapter对象主要用来承接Connection和DataSet对象. DataSet对象只关心访问操作数据,而不关心自身包含的数据信息来自哪个Connectio ...

随机推荐

  1. js中==与===的区别

  2. 自定义UIPageControl,可设置任意图片image。

    [self.pageControl setValue:[UIImage imageNamed:@"选中图片名称"] forKeyPath:@"_currentPageIm ...

  3. java代码性能优化总结(转载)

    原文链接:http://developer.51cto.com/art/201511/496263.htm 前言 代码优化,一个很重要的课题.可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改 ...

  4. mac操作快捷键

  5. springMVC框架中,在hib-config.xml配置sqlserver2008数据库连接的代码

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">     ...

  6. 遇到的check the manual that corresponds to your MySQL server version for the right syntax错误

    遇到的check the manual that corresponds to your MySQL server version for the right syntax错误. 结果发现是SQL关键 ...

  7. c++垃圾回收代码练习 引用计数

    学习实践垃圾回收的一个小代码 采用引用计数 每次多一个指针指向这个分配内存的地址时候 则引用计数加1 当计数为0 则释放内存 他的难点在于指针之间的复制 所有权交换 计数的变化 #include &l ...

  8. NDK开发之引用(局部引用,全局引用,虚全局引用)

    1.先引出我遇到的一个问题(我觉得先写问题,这样印象更深刻一点): Android Java层在调用本地jni代码的时候, 会维护一个局部引用表(最大长度是512), 一般jni函数调用结束后, jv ...

  9. 小希的数表2(用的for循环)

    #include<iostream> 02.#include<algorithm> 03.using namespace std; 04. 05.bool cmp(int a, ...

  10. EasyUI DataGrid 配置参数

    var queryParams = $('#SBDiv_1_DateGrid').datagrid('options').queryParams; queryParams.SearchTime = & ...