操作数据库需则要用到 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)的更多相关文章

  1. BOF和EOF的详细解释 ADO的三个核心对象

    使用ADO连接数据库进行查一个列表询的时候,数据库将查询结果返回查询端,在查询端的内存里面就会有一个列表,这个列表存放的就是查询的结果.这个内存中的列表就是数据集.在你的程序里面rs就是标识的这个数据 ...

  2. ADO.NET中COMMAND对象的ExecuteNonQuery、ExcuteReader和ExecuteScalar方法

    1.ExecuteNonQuery方法.该方法执行更新操作,即与UPDATE.INSERT.DELETE等语句有关的操作,在这种情况下,返回值是命令影响的行数.对其他语句,如SET或CREATE,则返 ...

  3. Ado.net总结-Command(指挥官)

    Command 概述 在 System.Data.SqlClient 命名空间下,对应的 Command 类为 SqlCommand,在创建 SqlCommand 实例前必须已经创建了与数据库的连接. ...

  4. 使用C#进行数据库增删改查ADO.NET(三)

    文章代码如下: class Program { static void Main (string[] args) { //连接数据库 string connString = "server= ...

  5. Ado.net 三[SQL注入,DataAdapter,sqlParameter,DataSet]

    1.SQL注入:SQL注入攻击是web应用程序的一种安全漏洞,可以将不安全的数据提交给运用程序,使应用程序在服务器上执行不安全的sql命令.使用该攻击可以轻松的登录运用程序. 例如:该管理员账号密码为 ...

  6. 框架设计之ADO.NET Command的ExecuteScalar误用情景及底层解说

    最近下载了点资料,学了学Android,发现Android入门还算简单,从.NET过渡到Android,也就三七十一天的事. 大伙有空也可以学学... 好了,言归正文,那日,有网友发了一个他们公司的数 ...

  7. Java进击C#——语法之ADO.NET

    本章简言 上一章讲到关于C#语法的基础部分.了解相关的基础部分之后我们就要去了解一下C#是什么样子访问数库的.C#把访问数据库这一部分的知识点叫作ADO.NET.即是JAVA常常讲到的JDBC这一部分 ...

  8. ADO.NET数据库编程

    ADO.NET数据库编程 1.ADO.NET的相关概念. Microsoft的新一代技术,是ADO组件的后继者. 主要目的是在.NET Framework平台存取数据. 提供一致的对象模型,可以存取和 ...

  9. 语法之ADO.NET

    ADO.NET的概念 由于本系列并不是主讲ADO.NET.所以这里笔者只会教上面定义有线连接方式相关的类.不管如何让我们先看一下ADO.NET类相关联的所有基类吧.这样子也方便我们下面的学习. 下面是 ...

随机推荐

  1. 关于Java正则和转义中\\和\\\\的理解

    定义 一个转义字符的目的是开始一个字符序列,使得转义字符开头的该字符序列具有不同于该字符序列单独出现时的语义. 转义就是指转换该字符的原本意义,从而变成另外的意义. \作为Java的转义字符 1.在j ...

  2. 273道题目;更新到java题目里面 (已迁移到其他类目下面,存储)

    1. Java 基础 1.JDK 和 JRE 有什么区别? 2. == 和 equals 的区别是什么? 3. 两个对象的 hashCode() 相同,则 equals() 也一定为 true,对吗? ...

  3. 第06组 Beta版本演示

    队名:福大帮 组长博客链接: https://www.cnblogs.com/mhq-mhq/p/12052263.html 作业博客 : https://edu.cnblogs.com/campus ...

  4. 请写出css3样式的优先级,并排序

    !important(权重最大)1000>内嵌样式(style="")>内部样式>外联样式>@import url("url");

  5. 【mybatis源码学习】ResultMap查询结果映射

    一.ResultMap包含的元素 constructor - 用于在实例化类时,注入结果到构造方法中 idArg - ID 参数:标记出作为 ID 的结果可以帮助提高整体性能 arg - 将被注入到构 ...

  6. SQLServer charindex函数, 查 某个字符 或 某个字符串 在 另一个字符串中的位置

    一:charindex()语法 CHARINDEX ( expression1 , expression2 [ , start_location ] ) 解析: expression1 必需 ---要 ...

  7. python3新特性函数注释Function Annotations用法分析

    本文分析了python3新特性函数注释Function Annotations用法.分享给大家供大家参考,具体如下: Python 3.X新增加了一个特性(Feature),叫作函数注释 Functi ...

  8. Spark2-数据探索

    freqItems sampleBy cov crosstab approxQuantitle boolmFilter 布隆选择器 corr 皮尔逊相关系数 countMinSketch Spark2 ...

  9. Hadoop记录-Apache hadoop+spark集群部署

    Hadoop+Spark集群部署指南 (多节点文件分发.集群操作建议salt/ansible) 1.集群规划节点名称 主机名 IP地址 操作系统Master centos1 192.168.0.1 C ...

  10. [转]git登录账号密码错误remote: Incorrect username or password

    链接地址:https://baijiahao.baidu.com/s?id=1622020216177100162&wfr=spider&for=pc