C#与数据库访问技术总结(五)之Command对象的常用方法
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对象的常用方法的更多相关文章
- c# 窗体开发4 数据库访问技术
ADO.NET的名称起源于ADO(ACTIVEX DATA OBJECTS) USING SYSTEM; USING SYSTEM.COLLECTIONS.GENERIC; USING SYSTEM. ...
- C#-数据库访问技术 ado.net——创建 数据库连接类 与 数据库操作方法 以及简单的数据的添加、删除、修改、查看
数据库访问技术 ado.net 将数据库中的数据,提取到内存中,展示给用户看还可以将内存中的数据写入数据库中去 并不是唯一的数据库访问技术,但是它是最底层的数据库访问技术 1.创建数据库,并设置主外键 ...
- C#与数据库访问技术总结(十八)
ADO.NET 代码综合示例 前面已经介绍过OLE DB.NET和SQL Server.NET数据提供者可以用来连接不同的数据源. 以下代码不仅综合演示了使用ADO.NET的这两种数据提供者访问数据库 ...
- C#与数据库访问技术总结(十五)之 DataAdapter对象代码示例
DataAdapter对象代码示例 下面的代码将说明如何利用DataAdapter对象填充DataSet对象. private static string strConnect=" data ...
- 数据库访问技术 odbc dao rdo uda jet oledb
一.UDA(UniversalDataAccess) 这是微软提供的通用数据访问策略.包括ADO.OLEDB和ODBC.它不光提供了数据库的访 问能力,对于其它的数据存储技术也同样支持,如目录服务.E ...
- C#与数据库访问技术总结(七)综合示例
综合示例 说明:前面介绍了那么多,光说不练假把式,还是做个实例吧. 表:首先你要准备一张表,这个自己准备吧.我们以学生表为例. 1.ExecuteScalar方法 ExecuteScalar方法执行返 ...
- C#与数据库访问技术总结(十七)
使用DataSet对象访问数据库 当对DataSet对象进行操作时,DataSet对象会产生副本,所以对DataSet里的数据进行编辑操作不会直接对数据库产生影响,而是将DataRow的状态设置为ad ...
- C#与数据库访问技术总结(十六)之 DataSet对象
DataSet对象 DataSet对象可以用来存储从数据库查询到的数据结果,由于它在获得数据或更新数据后立即与数据库断开,所以程序员能用此高效地访问和操作数据库. 并且,由于DataSet对象具有离线 ...
- C#与数据库访问技术总结(十四)之DataAdapter对象
DataAdapter对象 DataAdapter对象主要用来承接Connection和DataSet对象. DataSet对象只关心访问操作数据,而不关心自身包含的数据信息来自哪个Connectio ...
随机推荐
- 【BZOJ2595】游览计划(状压DP,斯坦纳树)
题意:见题面(我发现自己真是越来越懒了) 有N*M的矩阵,每个格子有一个值a[i,j] 现要求将其中的K个点(称为关键点)用格子连接起来,取(i,j)的费用就是a[i,j] 求K点全部连通的最小花费以 ...
- 如何使用本地yum源?
首先为大家介绍在Centos系统上如何利用系统光盘/镜像作为yum源,实现程序包的安装等操作 1.首先在VM虚拟机上确保已载入光盘镜像,载入成功后显示如下效果. 2.挂载光盘镜像文件,使用命令: mo ...
- java异常与处理
1:Java中的所有不正常类都继承于Throwable类.Throwable主要包括两个大类,一个是Error类,另一个是Exception类: 2:其中Error类中包括虚拟机错误和线程死锁,一旦E ...
- JDK的安装及部署配置(配图解)
JDK的安装及部署配置 双击安装文件,出现如下界面 点击[下一步]出现如下界面,更改安装路径(建议安装至D盘), 点击[下一步],出现如下界面,修改文件夹名. 点击[确定],耐心等待 直至出现如下界面 ...
- SQL性能优化(Oracle)
首先要搞明白什么叫执行计划? 执行计划是数据库根据SQL语句和相关表的统计信息作出的一个查询方案,这个方案是由查询优化器自动分析产生的,比如一条SQL语句如果用来从一个 10万条记录的表中查1条记录, ...
- MySQL-->基础-->001-->MySQL基本操作
一.MySQL安装 卸载mysql 第一步 sudo apt-get autoremove --purge mysql-server-5.0 sudo apt-get remove mysql-ser ...
- coreseek实战(一):windows下coreseek的安装与测试
coreseek实战(一):windows下coreseek的安装与测试 网上关于 coreseek 在 windows 下安装与使用的教程有很多,官方也有详细的教程,这里我也只是按着官方提供的教程详 ...
- mysql innodb存储引擎介绍
innodb存储引擎1.存储:数据目录.有配置参数为“ innodb_data_home_dir ” .“ innodb_data_file_path ” 和 “innodb_log_group_ho ...
- update select
update中加入select 最常用的update语法是:UPDATE <table_name>SET <column_name1> = <value>, SET ...
- cocos2d-x 之 CCArray 的遍历(3)
cocos2d-x中CCArray的遍历,需要几个宏.现代C++程序设计建议尽量不要使用宏,所以数组的遍历也可以自己写. 但cocos2d-x官方已经提供了几个方便数组遍历的几个宏,用好了,能方便许多 ...