ADO.NET 三(Command)
操作数据库需则要用到 Command 类中提供的属性和方法。下面来介绍一下如何使用 Command 类来操作数据表中的数据。
Command 类概述
在 System.Data.SqlClient 命名空间下,对应的 Command 类为 SqlCommand,在创建 SqlCommand 实例前必须已经创建了与数据库的连接。
SqlCommand 类中常用的构造方法如下表所示。
构造方法 | 说明 |
---|---|
SqlCommand() | 无参构造方法 |
SqlCommand(string commandText,SqlConnection conn) | 带参的构造方法,第 1 个参数是要执行的 SQL 语句,第 2 个参数是数据库的连接对象 |
对数据库中对象的操作不仅包括对数据表的操作,还包括对数据库、视图、存储过程等数据库对象的操作,接下来主要介绍的是对数据表和存储过程的操作。
在对不同数据库对象进行操作时,SqlCommand 类提供了不同的属性和方法,常用的属性和方法如下表所示。
属性或方法 | 说明 |
---|---|
CommandText | 属性,Command 对象中要执行的 SQL 语句 |
Connection | 属性,获取或设置数据库的连接对象 |
CommandType | 属性,获取或设置命令类型 |
Parameters | 属性,设置 Command 对象中 SQL 语句的参数 |
ExecuteReader() | 方法,获取执行查询语句的结果 |
ExecuteScalar() | 方法,返回查询结果中第 1 行第 1 列的值 |
ExecuteNonQuery() | 方法,执行对数据表的增加、删除、修改操作 |
使用 Command 类操作数据库
Command 类中提供了 3 种命令类型,分别是 Text、TableDirect 以及 StoredProcedure,默认情况下是 Text。
所谓 Text 类型是指使用 SQL 语句的形式,包括增加、删除、修改以及查询的SQL语句。
StoredProcedure 用于执行存储过程;TableDirect 仅在 OLE DB 驱动程序中有效。
在使用 Command 类操作数据库时需要通过以下步骤完成。
1) 创建 SqlCommand 类的实例
创建 SqlCommand 类的实例分两种情况,一种是命令类型为 Text 的,一种是命令类型为 StoredProcedure 的。
命令类型为 Text
SqlCommand SqlCommand 类的实例名 = new SqlCommand( SQL 语句 , 数据库连接类的实例 );
其中:
- SQL 语句:指该 SqlCommand 类的实例要执行的 SQL 语句。
- 数据库连接类的实例:指使用 SqlConnection 类创建的实例,通常数据库连接类的实例处于打开的状态。
命令类型为 StoredProcedure
SqlCommand SqlCommand 类的实例名 = new SqlCommand( 存储过程名称 , 数据库连接类的实例 );
需要注意的是,存储过程必须是当前数据库实例中的存储过程,并且在调用带参数的存储过程时,还需要在 SqlCommand 类的 实例中添加对应的存储过程参数。
为存储过程添加参数,需要使用 SqlCommand 类实例的 Parameters 属性来设置,具体的代码如下。
SqlCommand 类实例 .Parameters.Add( 参数名 , 参数值 );
在这里,参数名与存储过程中定义的参数名要一致。
2) 执行对数据表的操作
在执行对数据表的操作时通常分为两种情况,一种是执行非查询 SQL 语句的操作,即增加、修改、删除的操作,一种是执行 查询 SQL 语句的操作。
执行非查询 SQL 语句的操作
在执行非查询 SQL 语句时并不需要返回表中的数据,直接使用 SqlCommand 类的 ExecuteNonQuery 方法即可,该方法的 返回值是一个整数,用于返回 SqlCommand 类在执行 SQL 语句后,对表中数据影响的行数。
当该方法的返回值为 -1 时,代表 SQL 语句执行失败,当该方法的返回值为 0 时,代表 SQL 语句对当前数据表中的数据 没有影响。
例如 要删除学号为 1100 的学生的信息,而表中不存在该学号的学生的信息,SQL语句可以正常执行,但对表中的影响行数是 0。
具体的代码如下。
SqlCommand 类的实例 .ExecuteNonQuery();
需要注意的是,如果执行的 SQL 语句在数据库中执行错误,则会产生异常,因此该部分需要进行异常处理。
执行查询语句的操作
在执行查询语句时通常需要返回查询结果,SqlCommand 类中提供的 ExecuteReader 方法在执行查询 SQL 语句后,会返回一个 SqlDataReader 类型的值,通过遍历 SqlDataReader 类中的结果即可得到返回值。
具体的代码如下。
SqlDataReader dr = SqlCommand 类的实例 .ExecuteReader();
此外,如果在执行查询语句后并不需要返回所有的查询结果,而仅需要返回一个值,例如查询表中的记录行数,这时可以使用 ExecuteScalar 方法。具体的代码如下。
int returnvalue = SqlCommand 类的实例 .ExecuteScalar();
eg:
string sql = "SELECT * FROM UserAlertTable WHERE id=1";
using (SqlConnection con = new SqlConnection(str))
{
con.Open();
SqlCommand cmd = new SqlCommand(sql, con);
object obj = cmd.ExecuteScalar();
WriteLine($"返回结果:{obj}");
ReadKey();
}
using (SqlConnection con = new SqlConnection(str))
{
try
{
con.Open();
SqlCommand cmd = new SqlCommand("InsertData_UserAlertTable", con);
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter para1 = new SqlParameter("@number", 21);
SqlParameter para2 = new SqlParameter("@what", "e");
//cmd.Parameters.AddWithValue("@number", 17);
//cmd.Parameters.AddWithValue("@what", "ha");
cmd.Parameters.Add(para1);
cmd.Parameters.Add(para2);
int res = cmd.ExecuteNonQuery();
WriteLine($"返回结果:{res}");
ReadKey();
}
catch (Exception ex)
{
throw new Exception(ex.ToString());
}
}
ADO.NET 三(Command)的更多相关文章
- BOF和EOF的详细解释 ADO的三个核心对象
使用ADO连接数据库进行查一个列表询的时候,数据库将查询结果返回查询端,在查询端的内存里面就会有一个列表,这个列表存放的就是查询的结果.这个内存中的列表就是数据集.在你的程序里面rs就是标识的这个数据 ...
- ADO.NET中COMMAND对象的ExecuteNonQuery、ExcuteReader和ExecuteScalar方法
1.ExecuteNonQuery方法.该方法执行更新操作,即与UPDATE.INSERT.DELETE等语句有关的操作,在这种情况下,返回值是命令影响的行数.对其他语句,如SET或CREATE,则返 ...
- Ado.net总结-Command(指挥官)
Command 概述 在 System.Data.SqlClient 命名空间下,对应的 Command 类为 SqlCommand,在创建 SqlCommand 实例前必须已经创建了与数据库的连接. ...
- 使用C#进行数据库增删改查ADO.NET(三)
文章代码如下: class Program { static void Main (string[] args) { //连接数据库 string connString = "server= ...
- Ado.net 三[SQL注入,DataAdapter,sqlParameter,DataSet]
1.SQL注入:SQL注入攻击是web应用程序的一种安全漏洞,可以将不安全的数据提交给运用程序,使应用程序在服务器上执行不安全的sql命令.使用该攻击可以轻松的登录运用程序. 例如:该管理员账号密码为 ...
- 框架设计之ADO.NET Command的ExecuteScalar误用情景及底层解说
最近下载了点资料,学了学Android,发现Android入门还算简单,从.NET过渡到Android,也就三七十一天的事. 大伙有空也可以学学... 好了,言归正文,那日,有网友发了一个他们公司的数 ...
- Java进击C#——语法之ADO.NET
本章简言 上一章讲到关于C#语法的基础部分.了解相关的基础部分之后我们就要去了解一下C#是什么样子访问数库的.C#把访问数据库这一部分的知识点叫作ADO.NET.即是JAVA常常讲到的JDBC这一部分 ...
- ADO.NET数据库编程
ADO.NET数据库编程 1.ADO.NET的相关概念. Microsoft的新一代技术,是ADO组件的后继者. 主要目的是在.NET Framework平台存取数据. 提供一致的对象模型,可以存取和 ...
- 语法之ADO.NET
ADO.NET的概念 由于本系列并不是主讲ADO.NET.所以这里笔者只会教上面定义有线连接方式相关的类.不管如何让我们先看一下ADO.NET类相关联的所有基类吧.这样子也方便我们下面的学习. 下面是 ...
随机推荐
- java内存dump文件导出与查看
生成dump文件的命令:jmap -dump:format=b,file=20170307.dump 16048file后面的是自定义的文件名,最后的数字是进程的pid 使用jvisualvm来分析d ...
- 第07组 Alpha冲刺(6/6)
队名:摇光 队长:杨明哲 组长博客:求戳 作业博客:求再戳 队长:杨明哲 过去两天完成了哪些任务 文字/口头描述:博客生成的逻辑 展示GitHub当日代码/文档签入记录:(组内共用,已询问过助教小姐姐 ...
- 使用MSCK命令修复Hive表分区
set hive.strict.checks.large.query=false; set hive.mapred.mode=nostrict; MSCK REPAIR TABLE 表名; 通常是通过 ...
- PostgreSQL中的partition-wise join
与基于继承的分区(inheritance-based partitioning)不同,PostgreSQL 10中引入的声明式分区对数据如何划分没有任何影响.PostgreSQL 11的查询优化器正准 ...
- Mac 上ssh远程连接Linux服务器提示Host key verification failed.
当我们对重装远程服务器的时候会出现Host key verification failed问题 解决办法: rm -rf ~/.ssh/known_hosts 重新ssh连接,OK!
- Oracle11g R2客户端安装图文详解过程
转: Oracle11g R2客户端安装图文详解过程 2018-06-17 13:30:26 大话JAVA的那些事 阅读数 4129更多 分类专栏: Oracle 版权声明:本文为博主原创文章,遵 ...
- IEnumerable是什么
首先怎么认识一个对象 IE+number+able IE数字 可能 从名字上看不出什么玩意,以至于很久都没人真正认识这个接口 先看官方的解释 IEnumerable Interface Expose ...
- ChrW函数
ChrW 函数返回包含 Unicode 的 String,若在不支持 Unicode 的平台上,则其功能与 Chr 函数相同.相反的函数是 ASCW() 在access当中用到了
- .Net Core个人笔记
目录 前言 IOC注册 三种生命周期 如何注册一个IOC服务 .Net Core部署IIS之后500错误 管道和中间件 示意图 管道方法 中间件 加日志观看 使用MVC MVC服务注入 MVC管道调用 ...
- jenkins中启用tag标签
参照里面的第9步: https://www.cnblogs.com/effortsing/p/10468840.html