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,如需转载请自行联系原作者

目录
相关文章
|
5天前
|
人工智能 自然语言处理 JavaScript
2026年Windows+Ollama本地部署OpenClaw保姆级教程:本地AI Agent+阿里云上快速搭建
2026年OpenClaw凭借本地部署、私有化运行的特性,成为打造个人智能体的核心工具,而Ollama作为轻量级本地大模型管理工具,能让OpenClaw摆脱对云端大模型的依赖,实现**本地推理、数据不泄露、全流程私有化**的智能体验。本文基于Windows 11系统,从硬件环境准备、Ollama安装与模型定制、OpenClaw部署配置、技能扩展到常见问题排查,打造保姆级本地部署教程,同时补充阿里云OpenClaw(Clawdbot)快速部署步骤,兼顾本地私有化需求与云端7×24小时运行需求,文中所有代码命令均可直接复制执行,确保零基础用户也能快速搭建属于自己的本地智能体。
6904 47
|
2天前
|
人工智能 安全 API
CoPaw:3分钟部署你的 AI助理
源自阿里巴巴开源生态的个人 AI 助理——CoPaw。作为阿里倾力打造的开源力作,CoPaw 完美打通钉钉、飞书、Discord 等多平台对话通道,支持定时任务自动化。内置 PDF/Office 深度处理、新闻摘要等强大技能,更开放自定义扩展接口。坚持数据全程私有化部署,绝不上传云端,让每一位用户都能在大厂技术加持下,拥有安全、专属的智能助手。
|
6天前
|
人工智能 JSON JavaScript
手把手教你用 OpenClaw + 飞书,打造专属 AI 机器人
手把手教你用 OpenClaw(v2026.2.22-2)+ 飞书,10分钟零代码搭建专属AI机器人!内置飞书插件,无需额外安装;支持Claude等主流模型,命令行一键配置。告别复杂开发,像聊同事一样自然对话。
3255 9
手把手教你用 OpenClaw + 飞书,打造专属 AI 机器人
|
4天前
|
人工智能 自然语言处理 机器人
保姆级教程:Mac本地搭建OpenClaw及阿里云上1分钟部署OpenClaw+飞书集成实战指南
OpenClaw(曾用名Clawdbot、Moltbot)作为2026年最热门的开源个人AI助手平台,以“自然语言驱动自动化”为核心,支持对接飞书、Telegram等主流通讯工具,可替代人工完成文件操作、日历管理、邮件处理等重复性工作。其模块化架构适配多系统环境,既可以在Mac上本地化部署打造私人助手,也能通过阿里云实现7×24小时稳定运行,完美兼顾隐私性与便捷性。
2684 4
|
12天前
|
存储 人工智能 负载均衡
阿里云OpenClaw多Agent实战宝典:从极速部署到AI团队搭建,一个人=一支高效军团
在AI自动化时代,单一Agent的“全能模式”早已无法满足复杂任务需求——记忆臃肿导致响应迟缓、上下文污染引发逻辑冲突、无关信息加载造成Token浪费,这些痛点让OpenClaw的潜力大打折扣。而多Agent架构的出现,彻底改变了这一现状:通过“单Gateway+多分身”模式,让一个Bot在不同场景下切换独立“大脑”,如同组建一支分工明确的AI团队,实现创意、写作、编码、数据分析等任务的高效协同。
5320 31
|
4天前
|
人工智能 数据可视化 安全
Claude Code小白邪修指南:一键安装+语音增效,附阿里云极速部署OpenClaw/Clawdbot攻略
对于AI工具新手而言,Claude Code的原生安装流程繁琐、终端操作门槛高,让不少人望而却步。但2026年的今天,“邪修”玩法彻底打破这一壁垒——通过开源工具实现一键部署,用语音交互提升3-4倍效率,再搭配阿里云OpenClaw的稳定运行环境,让小白也能快速上手AI编程助手。本文将详解“邪修”核心技巧、语音增效方案,以及阿里云OpenClaw部署步骤,附带完整配置代码与避坑指南,帮助你轻松开启AI辅助工作新模式。
1746 0
|
7天前
|
存储 人工智能 BI
2026年OpenClaw(Clawdbot)极简部署:接入小红书全自动运营,一个人=一支团队
2026年的小红书运营赛道,AI自动化工具已成为核心竞争力。OpenClaw(原Clawdbot)凭借“Skill插件化集成、全流程自动化、跨平台联动”的核心优势,彻底颠覆传统运营模式——从热点追踪、文案创作、封面设计到自动发布、账号互动,仅需一句自然语言指令,即可实现全链路闭环。而阿里云作为OpenClaw官方推荐的云端部署载体,2026年推出专属秒级部署方案,预装全套运行环境与小红书运营插件,让零基础用户也能10分钟完成部署,轻松拥有7×24小时在线的“专属运营团队”。
2253 10
|
16天前
|
人工智能 自然语言处理 监控
OpenClaw skills重构量化交易逻辑:部署+AI全自动炒股指南(2026终极版)
2026年,AI Agent领域最震撼的突破来自OpenClaw(原Clawdbot)——这个能自主规划、执行任务的智能体,用50美元启动资金创造了48小时滚雪球至2980美元的奇迹,收益率高达5860%。其核心逻辑堪称教科书级:每10分钟扫描Polymarket近千个预测市场,借助Claude API深度推理,交叉验证NOAA天气数据、体育伤病报告、加密货币链上情绪等多维度信息,捕捉8%以上的定价偏差,再通过凯利准则将单仓位严格控制在总资金6%以内,实现低风险高频套利。
8587 69
|
6天前
|
人工智能 运维 安全
OpenClaw极速部署:ZeroNews 远程管理OpenClaw Gateway Dashboard指南+常见错误解决
OpenClaw作为高性能AI智能体网关平台,其Gateway Dashboard是管理模型调用、渠道集成、技能插件的核心操作界面,但默认仅支持本地局域网访问。官方推荐的Tailscale、VPN等远程访问方案在国内网络环境中体验不佳,而ZeroNews凭借轻量化部署、专属域名映射、多重安全防护的特性,成为适配国内网络的最优远程管理解决方案。
1909 2