• 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());
        }
      }

  • 相关阅读:
    Strange RadioButton group behavior with ToolBar
    在XAML中为ItemsControl定义分组,适合mvvm绑定
    如何编写无法维护的代码 让自己稳拿铁饭碗 ;-)
    WPF 应用程序资源、内容和数据文件
    XNA+WPF solution worked
    object转List<XXX>的问题
    VS2013 执行Enable-Migrations,产生错误的解决办法
    WPF 为 PasswordBox 控件添加水印,最低级版
    为 ItemsControl 类型的控件提供行号,mvvm模式 绑定集合
    把父窗体设置为桌面,显示桌面时程序仍然能显示
  • 原文地址:https://www.cnblogs.com/lu-yuan/p/11382000.html
Copyright © 2020-2023  润新知