前言

命令 (ADO.NET)

建立与数据源的连接后,可以使用 DbCommand 对象来执行命令并从数据源中返回结果。 您可以使用命令构造函数之一为要使用的 .NET Framework 数据提供程序创建命令。 构造函数可以采用可选参数,如要在数据源中执行的 SQL 语句、DbConnection 对象或 DbTransaction 对象。 您也可以将这些对象配置为命令的属性。

也可以使用 DbConnection 对象的 CreateCommand 方法创建用于特定连接的命令。 由命令执行的 SQL 语句可以使用 CommandText 属性进行配置。

执行命令 (ADO.NET)

包含在 .NET Framework 中的每个 .NET Framework 数据提供程序都拥有自己的继承自 DbCommand 的命令对象。 用于 OLE DB 的 .NET Framework 数据提供程序包括 OleDbCommand 对象,用于 SQL Server 的 .NET Framework 数据提供程序包括 SqlCommand 对象,用于 ODBC 的 .NET Framework 数据提供程序包括 OdbcCommand 对象,用于 Oracle 的 .NET Framework 数据提供程序包括 OracleCommand 对象。 其中每个对象都根据命令的类型和所需的返回值公开用于执行命令的方法,如下表所述。 。

命令

返回值

ExecuteReader

返回一个 DataReader 对象

ExecuteScalar

返回一个标量值

ExecuteNonQuery

执行不返回任何行的命令

ExecuteXMLReader

返回 XmlReader。 只用于 SqlCommand 对象

每个强类型命令对象还支持指定如何解释命令字符串的 CommandType 枚举,如下表所述。

CommandType

说明

Text

定义要在数据源处执行的语句的 SQL 命令

StoredProcedure

存储过程的名称。 您可以使用某一命令的 Parameters 属性访问输入和输出参数,并返回值(无论调用哪种 Execute 方法)。 当使用 ExecuteReader 时,在关闭 DataReader 后才能访问返回值和输出参数。

TableDirect

表的名称

2.1ADO.NET命令

2.1.1.Command对象:command对象继承于.NET Framework的IDbCommand类,该对象接口表示连接到数据源时执行的SQL语句。

Command对象是ADO.NET中的重要对象,它实现数据库操作,如查询、插入、修改和删除等。通常情况下可以通过

构造函数或者函数CreateCommand()创建对象Command,其中第一种为常用方式。

对象Command的属性CommandType提供三种执行命令类型:

(1)Text(文本)类型 用于执行SQL Server语句,由SQL语句构成数据库操作文本,Command对象可以把该文本直接传递给数据库,

不需要进行任何处理。

(2)Stored Procedure(存储过程)类型 用于调用并执行存储过程的命令,存储过程是一种特殊的数据库命令,可以把多个命令集中起来

一次提交给数据库,可以提供数据库的执行效率。

(3)TableDirect类型 一种特殊类型的Command命令,它从数据库返回一个完整的表,等价于Select *From TableName来调用Text类型的Command命令。

2.1.2使用Command命令对象执行SQL语句

1.ExecuteScalar()方法/函数 返回第一个结果集中第一行的第一列记录。

2.ExecuteReader()执行行的命令,返回一个DataReader对象。DataReader是一种只读的、向前的数据库记录流。

3.ExecuteNonQuery() 返回受命令影响记录的行数,它可以执行INSERT、DELETE、UPDATE、SET语句及Transact-SQL等命令。

2.2使用Command命令的Parameters方法获取数据

Command命令参数

1.SQL语句和存储过程可以有输入输出参数以及返回值

2.Command对象参数用来设置或者返回这些参数

3.SqlParameter OleDbParameter

4.Parameter对象的属性

(1)ParameterName命令参数的名称,例如:@Catld

(2)DbType 连接到数据库类型,例如:SqlType和OleDbType

(3)Direction表明参数的方向——输入、输出、输入/输出或返回

(4)Value指定参数的值

(5)Size指定参数大小

实例和具体介绍

ADO.NET提供了Connection来连接数据库,同时也提供了Command对象来查询数据库。同Connection对象一样,Command也有两种:OleDbCommand和SqlCommand.其区别同Connection对象。

要操纵数据库,必须先使用Connection来连接到数据库,再创建一个Command来查询。有几种创建方式,例:

SqlCommand cmd;

string strCon="server=localhost;database=Northwind;Trusted_Connection=Yes;";
string strqry="select * from Categories";
SqlConnection con=new SqlConnection(strCon);
con.Open();
¹cmd=con.CreateCommand(); //这里使用用Connection对象的CreateCommand方法来创建一个Command对象。
 cmd.CommandText=strqry;
 SqlDataReader reader=cmd.ExecuteReader();

² cmd=new SqlCommand();   //直接使用new 关键字来创建
 cmd.CommandText=strqry;
 cmd.Connection=con;   //设置与数据库的连接

³cmd=new SqlCommand(strqry,con);//直接在new的时候带两个参数来创建

执行方式:

cmd.ExecuteReader();cmd.ExecuteNonQuery();cmd.ExecuteScalar();

cmd.ExecuteXmlReader();)

1,ExecuteReader();返回一个SqlDataReader对象或OleDbDataReader对象,这个看你的程序的需要去做。可以通过这个对象来检查查询结果,它提供了“游水”式的执行方式,即从结果中读取一行之后,移动到另一行,则前一行就无法再用。有一点要注意的是执行之后,要等到手动去调用Read()方法之后,DataReader对象才会移动到结果集的第一行,同时此方法也返回一个Bool值,表明下一行是否可用,返回True则可用,返回False则到达结果集末尾。

使用DataReader可以提高执行效率,有两种方式可以提高代码的性能:一种是基于序号的查找,一个是使用适当的Get方法来查找。因为查询出来的结果一般都不会改变,除非再次改动查询语句,因此可以通过定位列的位置来查找记录。用这种方法有一个问题,就是可能知道一列的名称而不知道其所在的位置,这个问题的解决方案是通过调用DataReader 对象的GetOrdinal()方法,此方法接收一个列名并返回此列名所在的列号。例:

int id=reader.GetOrdinal("CategoryName");
while(reader.Read())
{
   Response.Write(reader[id]);
 }
reader.Close();

至于第二种方式很直观,例:

while(reader.Read())
{
 Response.Write(reader.GetInt32(0).ToString()+" "+reader.GetString(1).ToString()+" <br>");
}

DataReader的GetInt32()和GetString()通过接收一个列号来返回一个列的值,这两种是最常用的,其中还有很多其它的类型。

(注:DataReader对象在调用Close()方法即关闭与数据库的连接,如果在没有关闭之前又重新打开第二个连接,则会产生一条异常信息)

2.,ExecuteNonQuery() 这个方法并不返回一个DataReader对象,而是返回一个int类型的值,即在执行之后在数据库中所影响的行数。

例:

int affectrows=cmd.ExecuteNonQuery();
Response.Write(affectrows +" 条记录受影响");

3,ExecuteScalar() 这个方法不接受任何参数,仅仅返回查询结果集中的第一行第一列,而忽略了其它的行和列,而且返回的是一个object类型,在使用之前必须先将它强制转换为所需类型。如果返回的仅仅是一个单独的数据元,则可以使用此方法来提高代码的性能。例:

string strCon="server=localhost;database=Northwind;Trusted_Connection=Yes;";
string strqry="select count(*) from Categories";
SqlConnection con=new SqlConnection(strCon);
con.Open();
SqlCommand cmd=con.CreateCommand();
int i=Convert.ToInt32(cmd.ExecuteScalar());//必须强制转换

4,ExecuteXmlReader() 此方法用于XML操作,返回一个XmlReader对象,由于系统默认没有引用 System.Xml名空间,因此在使用前必须前引入。例:

string strCon="server=localhost;database=Northwind;Trusted_Connection=Yes;";
SqlConnection con=new SqlConnection(strCon);
con.Open();
SqlCommand cmd = new SqlCommand("select * from Categories FOR XML AUTO, XMLDATA", con);
XmlReader xr=cmd.ExecuteXmlReader();
Response.Write(xr.AttributeCount);//这里获取当前节点上的属性个数

xr.Close();

执行完毕之后,照样要显式地调用Close()方法,否则会抛出异常。

使用参数化的查询

先看一段SQL语句:select CategoryID,Description from Categories where CategoryID=? 其中的问号就是一个参数。但在使用的时候必须是带有@前缀的命名参数,因为.NET数据提供程序不支持这个通用的参数标记“?”.使用参数化的查询可以大大地简化编程,而且执行效率也比直接查询字符串要高,也更方便,很多情况下都需要更改查询字符串,这种方式就提供了方便,只需更改参数的值即可。例:

string strCon="server=localhost;database=Northwind;Trusted_Connection=Yes;";
SqlConnection con=new SqlConnection(strCon);
con.Open();
string strqry="select * from Categories where CategoryID=@CategoryID";//带参数的查询
SqlCommand cmd=new SqlCommand(strqry,con);
cmd.Parameters.Add("@CategoryID",SqlDbType.Int,4);//给参数赋于同数据库中相同的类型
cmd.Parameters["@CategoryID"].Value="3";//给参数赋值,可灵活改变
SqlDataReader r=cmd.ExecuteReader();

while(r.Read())
{
Response.Write(r.GetString(2)+"<br>");//取出指定参数列的值
}
con.Close();//切记关闭

c#.net command 命令详细分析相关推荐

  1. H3C交换机 路由器 Save 命令详细分析

    Save保存配置命令 可以在几乎所有视图使用,那么它有什么用法呢? 目录 save ? 可以得到帮助 Save 查询工具  讲的可以说看不下去 命令分析 附录 启动配置文件选择顺序 常用Save命令 ...

  2. WPF(六) Command 命令模型源码分析

    1.ICommand源码分析 ​ 在之前 WPF(三) WPF命令 中我们已经分析过了 WPF 的命令系统,包括WPF默认的 RoutedCommand 以及我们自定义的 ICommand 命令实现. ...

  3. ffmpeg命令分析【详细分析合集】

    ffmpeg命令分析[内容包括]-vf/ac/b:v/r/re/segment/t/ss/output_ts_offset/vn/acc/print/yuv420p/yuv封装mp4/FFmpeg硬件 ...

  4. linux中df命令用法,详细分析Linux df命令的使用方法

    Linux df命令是学习Linux管理的一个应用的一个简单的命令,但是简单的命令有时会给我们以巨大的帮助,这里详细介绍一下Linux df命令的使用. df命令详细用法 a:显示全部的档案系统和各分 ...

  5. sodu 命令场景分析

    摘自:http://www.cnblogs.com/hazir/p/sudo_command.html sudo 命令情景分析 Linux 下使用 sudo 命令,可以让普通用户也能执行一些或者全部的 ...

  6. gsm模块 java 录音_Android GSM驱动模块详细分析

    Android的RIL驱动模块, 在hardware/ril目录下,一共分rild,libril.so以及librefrence_ril.so三个部分,另有一 radiooptions可供自动或手动调 ...

  7. Oracle sqlplus的set命令详细使用和设置

    Oracle sqlplus的set命令详细使用和设置 SQL*Plus是Oracle提供的访问数据库服务器的客户端软件,是Oracle的核心组件,也是Oracle DBA最常用的工具. 1.1  s ...

  8. Uboot代码结构详细分析

    1. Bootloader功能分析 Bootloader(如Uboot.Redboot.Blob.vivi等)直接和CPU.外围硬件设备(存储器.网卡.LCD等)打交道,负责初始化硬件设备,以及负责拉 ...

  9. [2021.10.14][Android P]OpenCamera详细分析(Camera2+Hal3)

    因为工作涉及到Android Camera系统的问题,本文整理了在Android P上讲解OpenCamera比较详细的文章,结合Andriod P源码,以架构图.UML顺序图.UML类图和关键代码走 ...

最新文章

  1. 两个数之和等于第三个数
  2. 屏幕滚动控件Scrollview
  3. Centos6.4_X64飞信安装
  4. SSM+BJUI实现以Base64方式上传照片
  5. 微信小程序上线广告功能 打造O2O闭环
  6. KafkaConsumer.poll : Timeout must not be negative
  7. 文本获取和搜索引擎中的反馈模型
  8. 如何将静态网页部署到github上
  9. 简单应用定时器和监听器
  10. JavaScript中this和$(this)之间的区别以及extend的使用
  11. python difflib 编辑距离_LeetCode--072--编辑距离(python)
  12. 基于Python的BOSS直聘Python岗位数据分析
  13. 程序化交易逆境中的奋斗史!
  14. AlarmClock slow alarm Alarm
  15. 如何在大屏幕上滚动播放视频、图片和文字
  16. STM32驱动直流电机
  17. GS1条形码为什么那么贵?有什么便宜的办法吗?
  18. 如何学习嵌入式系统(基于ARM平台)
  19. 计算机里的百度云盘怎么删除,百度云盘怎么删除好友 百度云盘删除好友方法...
  20. Double 保留四位小数

热门文章

  1. 【调试】sysRq按键使用方法
  2. windows配置mysql8.0主从数据库,主从数据同步。
  3. java -Djava.ext.dirs= -jar 启动项目,产生的问题
  4. 《关于炒股有意思的几个“故事” 》
  5. 怎样做网络推广浅析网站标题如何写更利于SEO?
  6. translate,transform和transition的区别与联系
  7. JS实现字符串模糊匹配
  8. Linux虚拟机无法联网问题解决
  9. 华丽介绍夏日冰点------この青空に約束を
  10. 以红酒数据集分类为例做决策树的可视化