4-1 ADO.NET简介 6

简介:

4-1-6  Command对象

1.Command对象概述

数据库连接建立好以后,要操作数据库就得向数据库发送命令信息。所谓命令信息就是指SQL语句或者存储过程名称。除了增删查改数据外,命令信息还可以对数据源执行一些不返回结果集的查询,以及改变数据源结构的数据定义命令信息,如DDL语言。
ADO.NET中,命令信息是通过Command对象管理的。与数据库建立连接之后,可以使用Command对象执行命令并从数据源返回结果。Command对象工作示意如图418所示:
 
4-18 Command对象工作示意图
不同的数据提供程序对应着不同的Command对象,请看表47。在后面的内容中,主要以SqlCommand对象为例。
4-7 各个命名空间中的command对象表
提供程序
Command
SQL数据提供程序
SqlCommand
OLE DB数据提供程序
OleDbCommand
Oracle数据提供程序
OracleCommand
ODBC数据提供程序
OdbcCommand

2.Command对象的使用

1Command对象的属性和方法
Command对象最常用的属性有CommandTextCommandTypeConnection。其中CommandText属性用来获取或设置欲执行的内容,可以是SQL语句或者存储过程名称。CommandType属性用来获取或设置命令类型,指示当前命令是SQL语句还是存储过程名称。当将CommandType属性设置为StoredProcedure时,应将CommandText属性设置为存储过程的名称;CommandType属性设置为Text时,应将CommandText属性设置为SQL语句。Connection属性用来获取或设置Command对象使用的Connection对象。
Command对象最常用的方法有ExecuteNonQuery()、ExecuteReader()和ExecuteScalar()。其中ExecuteNonQuery()方法对连接执行Transact-SQL语句并返回受影响的行数。可以使用ExecuteNonQuery()方法来执行目录操作(例如查询数据库的结构或创建诸如表等的数据库对象),或通过执行UPDATEINSERTDELETE语句,在不使用 DataSet 的情况下更改数据库中的数据。虽然ExecuteNonQuery()方法不返回任何行,但映射到参数的任何输出参数或返回值都会用数据进行填充。对于UPDATEINSERTDELETE语句,返回值为该命令所影响的行数。对于所有其他类型的语句,返回值为-1。如果发生回滚,返回值也为-1ExecuteReader()方法将CommandText所设置的命令信息发送到数据库,并生成一个SqlDataReader对象。ExecuteScalar()方法执行查询,并返回查询所返回的结果集中第一行的第一列,忽略其他列或行。使用ExecuteScalar()方法从数据库中检索单个值(例如一个聚合值)。与使用ExecuteReader()方法,然后使用SqlDataReader()返回的数据执行生成单个值所需的操作相比,此操作需要的代码较少。请看下面的示例:
 
private  static void CreateCommand(string queryString,string connectionString)
{
        using (SqlConnection connection = new SqlConnection(connectionString))
        {
            SqlCommand command = new SqlCommand();
            command.Connection = connection;
            command.CommandTimeout = 15;
            command.CommandType = CommandType.Text;
            command.CommandText = queryString;
            connection.Open();
            SqlDataReader reader = command.ExecuteReader();
            while (reader.Read())
            {
                Console.WriteLine(String.Format("{0}, {1}",reader[0], reader[1]));
            }
        }
}
 
2Command对象组件上机实验

 

案例学习1:向窗体添加Command对象组件并配置实验

4-19 向窗体添加四个基本的数据对象组件
u 实验步骤(1):添加SqlCommand组件
SqlconnectionSqlCommandoledbconnectionoledbcommand对象组件在默认情况下工具箱中是没有的,需要手动添加。首先右击工具箱弹出菜单;在弹出菜单中点击“选择项”;出现选择工具箱;选中要使用到的SqlconnectionSqlCommandoledbconnectionoledbcommand对象组件,在前面的复选框中打上对号;最后点击“确定”,上述组件就出现在工具箱中。如图4-20所示。
4-20 添加后的四个基本的数据对象组件
u 实验步骤(2):配置SqlCommand组件SQL命令
鼠标左键单击sqlconnection对象,命名为sqlConnection1,在其connectionstring属性之中键入字符串:Data Source=(local);Initial Catalog=school;User ID=sa。其中需要用户提前配置MSSQL数据库的是:可以以用户身份登录,登录名为sa,密码为空;另外有数据库为school
鼠标左键单击SqlCommand对象,配置其Connection属性为sqlConnection1对象,配置其commandtext为用户自定义的SQL语句,如:select * from student
u 实验步骤(3):配置oledbCommand组件SQL命令
鼠标左键单击oledbconnection对象,命名为oledbconnection1,在其connectionstring属性之中点击下拉列表框,在弹出的添加连接对话框中点击数据源的更改按钮,在弹出的更改数据源对话框中,选择数据源为“Microsoft Access数据库文件”,点击确定后浏览本机Access数据库文件即可。
鼠标左键单击oledbCommand对象,配置其Connection属性为oleDbConnection1对象,配置其commandtext为用户自定义的SQL语句,如:select * from teacher

 

案例学习2:通过编写代码来设置Command对象实验

在代码编辑器里面,通过编写代码的方式创建Command对象的过程参见图421所示:
4-21 创建命令对象图
上述代码的含义是:SqlCommand1对象为SqlCommand类的实例化,表示为创建的Command对象名称。其中的strSQL是字符串类型,可以被赋值任何有效的SQL语句。
在对象创建过程中,将SQL语句作为参数传递给SqlCommand类的构造函数,这样命令对象SqlCommand1就可以用来访问数据了。构造函数还有3种类型的重载,参见表48
4-8 SqlCommand类的构造函数表
名称
说明
初始化SqlCommand类的新实例。
用查询文本初始化SqlCommand类的新实例。
初始化具有查询文本和SqlConnectionSqlCommand类的新实例。
使用查询文本、一个SqlConnection以及SqlTransaction来初始化SqlCommand类的新实例。
u 实验步骤(1):新建窗体
建立窗体文件form2,从工具箱之中拖拽一个button按钮到窗体上,用鼠标双击button按钮,开始进行下面代码的编辑工作。
u 实验步骤(2):编写代码
该部分代码完成,单击button按钮后,向school数据库的student表之中插入一条数据。
 
 private  void button1_Click(object sender, EventArgs e)
        {
            SqlConnection conn = new SqlConnection();
            conn.ConnectionString = "Data Source=(local);Initial Catalog=school;User ID=sa";
            conn.Open();
            SqlTransaction sqltran = conn.BeginTransaction();
            string sqlstring = "insert into student(sno,sname) values(3390220,' 张三')" ;
            SqlCommand comm = new SqlCommand(sqlstring, conn);
            comm.Transaction = sqltran;
            int p = comm.ExecuteNonQuery();
            sqltran.Commit();
            comm.Dispose();
            comm.Clone();
            conn.Dispose();
            conn.Close();
        }

4-1-7  .NET中的事务处理

在应用程序的数据处理过程中,经常会遇到一种情况:当某一数据发生变化后,相关的数据不能及时被更新,造成数据不一致,以至发生严重错误。例如在一个销售系统里,通过帐单处理模块完成对销售表的数据处理,客户端销售人员已经将库存货品销售出去,但与销售表相关的库存表尚未及时更新,结果娶她销售人员再读取库存数据就会出现数据不一致的现象。
为此,在数据库基础理论中我们引入事务的概念。所谓事务就是这样的一系列操作,这些操作被视为一个操作序列,要么全做,要么全部做,是一个不可分割的程序单元。在数据库数据处理中经常会发生数据更新事件,为了保证数据操作的安全与一致,大型数据库服务器都支持事务处理,以保证数据更新在可控的范围内进行。ADO.NET通过Connection对象的BeginTransaction()方法实现对事务处理的支持,该方法返回一个实现IDbTransaction接口的对象,而该对象是在System.Data中被定义的。

1.事务处理命令

调用Connection对象的BeginTransaction()方法,返回的是一个DbTransaction对象。DbTransaction对象常用的事务处理命令包括下面三个:
n Begin:在执行事务处理中的任何操作之前,必须使用Begin命令来开始事务处理;
n Commit:在成功将所有修改都存储于数据库时,才算是提交了事务处理;
n Rollback:由于在事务处理期间某个操作失败,而取消事务处理已做的所有修改,这时将发生回滚;
不同命名空间里的DbTransaction类名称是不同,表示也不同。参见表49
4-9 DbTransaction类在不同命名空间里的表
OdbcTransaction
表示对Odbc数据源进行的SQL 事务处理。
OleDbTransaction
表示对OleDb数据源进行的SQL事务处理。
OracleTransaction
表示对Oracle数据库进行的事务处理
SqlTransaction
表示要对SQL Server数据库进行的Transact-SQL事务处理
在后面的内容中,我们主要讨论SqlTransaction对象。

2.SqlTransaction对象的使用

1SqlTransaction对象的属性和方法
SqlTransaction对象表示要对数据源进行的事务处理,其常用的属性有ConnectionConnection属性是用来获取与该事务关联的SqlConnection对象,或者如果该事务不再有效,则为空引用。SqlTransaction对象常用的方法有Save()Commit()Rollback(),其中Save()方法在事务中创建保存点(它可用于回滚事务的一部分),并指定保存点名称;Commit()方法用来提交数据库事务,Rollback()方法从挂起状态回滚事务。

3. 案例学习:ADO.NET实现事务处理实验

u 实验步骤(1):新建窗体
在窗体文件form2上,从工具箱之中再拖拽一个button按钮到窗体上,命名为button2,用鼠标双击button2按钮,开始进行下面代码的编辑工作。
u 实验步骤(2):编写代码
该部分代码完成实现事务处理的基本功能。
private void button1_Click(object sender, EventArgs e)
        {
            SqlConnection conn = new SqlConnection();
            conn.ConnectionString = "Data Source=(local);Initial Catalog=school;User ID=sa";
            conn.Open();
            // 注意此处为一个事务开始之处
            SqlTransaction sqltran = conn.BeginTransaction();
            string sqlstring = "insert into student(sno,sname) values(3390220,' 张三')";
            SqlCommand comm = new SqlCommand(sqlstring, conn);
            comm.Transaction = sqltran;
            int p = comm.ExecuteNonQuery();
            sqltran.Commit();
            // 此处为一个事务正常结束之处
             comm.Dispose();
            comm.Clone();
            conn.Dispose();
            conn.Close();
        }
通过上面的案例我们可以看出,在ADO.NET的应用程序中引入事务处理大致分四步:
n  第一步:通过连接对象产生事务对象sqltran
n  第二步:将事务对象sqltran绑定到命令对象的Transaction属性;
n  第三步:执行命令对象;
n  第四步:通过事务对象sqltranCommit()方法,提交事务,或者通过事务对象sqltranRollback()方法回滚事务。



本文转自 qianshao 51CTO博客,原文链接:http://blog.51cto.com/qianshao/216006,如需转载请自行联系原作者

目录
相关文章
|
存储 开发框架 .NET
ADO.NET基础01
ADO.NET基础01
118 0
ADO.NET基础01
|
SQL 数据库连接 数据处理
ADO.NET基础03
ADO.NET基础03
120 0
ADO.NET基础03
|
SQL 安全 数据库连接
ADO.NET基础02
ADO.NET基础02
179 0
ADO.NET基础02
|
SQL Oracle 关系型数据库
ADO.Net简介 140
  ADO.NET是.Net中一组类库,通过这组类库可以让我们通过程序的方式访问数据库中数据;之前学习的都是在数据库管理器中通过设计器或者SQL语句进行增删改查等操作数据库中的数据,对于普通用户不可能每个人都必须学习SQL,才能查看使用数据库,我们使用ADO.Net中的类库通过搭建比如窗体程序,使普通用户通过窗体上的按钮就可以很方便地操作和使用数据库中的数据,比如去买火车飞机等票时,窗口的出票员他们不可能每个人都去学习过SQL的知识后才能上岗,他们也是通过窗体或者网页方式查询使用数据库的数据的   ADO.NET中最重要的两个类:1)Connection用来连接数据库 2)Command用
117 0
|
SQL 安全 数据库
|
存储 大数据 程序员
|
缓存 数据库 数据格式
|
SQL Oracle 关系型数据库
|
SQL 安全 数据库连接
|
SQL 安全 索引