首页 > 编程笔记 > C#笔记 阅读:8

C# Command对象用法详解(附带实例)

使用 Connection 对象与数据源建立连接后,可以使用 Command 对象对数据源执行查询、添加、删除和修改等各种操作,操作实现的方式可以使用 SQL 语句,也可以使用存储过程。

根据 .NET Framework 数据提供程序的不同,Command 对象也可以分成 4 种,分别是 SqlCommand、OleDbCommand、 OdbcCommand 和 OracleCommand,在实际的编程过程中应该根据访问的数据源不同,选择相应的 Command 对象。

Command 对象的常用属性及说明如下表所示:

表:Command对象的常用属性及说明
属性 说明
CommandType 获取或设置 Command 对象要执行命令的类型
CommandText 获取或设置要对数据源执行的 SQL 语句或存储过程名或表名
CommandTimeout 获取或设置在终止对执行命令的尝试并生成错误之前的等待时间
Connection 获取或设置 Command 对象使用的 Connection 对象的名称
Parameters 获取 Command 对象需要使用的参数集合

例如,使用 SqlCommand 对象对 SQL Server 数据库执行查询操作,代码如下:
// 创建数据库连接对象
SqlConnection conn = new SqlConnection("Server=XIAOKE;User Id=sa;Pwd=;Database=db_EMS");
SqlCommand comm = new SqlCommand();  // 创建对象SqlCommand
comm.Connection = conn;  // 指定数据库连接对象
comm.CommandType = CommandType.Text;  // 设置要执行命令类型
comm.CommandText = "select * from tb_stock";  // 设置要执行的SQL语句

Command 对象的常用方法及说明如下表所示:

表:Command对象的常用方法及说明
方法 说明
ExecuteNonQuery 用于执行非 SELECT 命令,比如 INSERT、DELETE 或者 UPDATE 命令,并返回 3 个命令所影响的数据行数。另外,也可以用来执行一些数据定义命令,比如新建、更新、删除数据库对象(如表、索引等)
ExecuteScalar 用于执行 SELECT 查询命令,返回数据中第一行第一列的值,该方法通常用来执行那些用到 COUNT 或 SUM 函数的 SELECT 命令
ExecuteReader 执行 SELECT 命令,并返回一个 DataReader 对象,这个 DataReader 对象是一个只读向前的数据集

在表中,这 3 种方法非常重要,如果要使用 ADO.NET 完成某种数据库操作,一定会用到上面这些方法,这 3 种方法没有优劣之分,只是使用的场合不同而已,所以一定要弄清楚它们的返回值类型及其使用方法,以便在合适的场合使用它们。

用Command对象操作数据

以操作 SQL Server 数据库为例,向数据库中添加记录时,首先要创建 SqlConnection 对象连接数据库,然后定义添加数据的 SQL 字符串,最后调用 SqlCommand 对象的 ExecuteNonQuery 方法执行数据的添加操作。

【实例 1】向数据表中添加编程词典的价格信息。创建一个 Windows 应用程序,在默认窗体中添加两个 TextBox 控件、一个 Label 控件和一个 Button 控件,其中,TextBox 控件用来输入要添加的信息,Label 控件用来显示添加成功或失败信息,Button 控件用来执行数据添加操作,代码如下:
private void button1_Click(object sender, EventArgs e)
{
    // 创建数据库连接对象
    SqlConnection conn = new SqlConnection("Server=XIAOKE;User Id=sa;Pwd=;Database=db_EMS");
    string strsql = "insert into tb_PDic(Name,Money) values('" + textBox1.Text + "','" + Convert.ToDecimal(textBox2.Text) + "')";
    SqlCommand comm = new SqlCommand(strsql, conn);  // 创建SqlCommand对象
    if (conn.State == ConnectionState.Closed)  // 判断连接是否关闭
    {
        conn.Open();  // 打开数据库连接
    }
    // 判断ExecuteNonQuery方法返回的参数是否大于0,大于0则表示添加成功
    if (Convert.ToInt32(comm.ExecuteNonQuery()) > 0)
    {
        label3.Text = "添加成功!";
    }
    else
    {
        label3.Text = "添加失败!";
    }
    conn.Close();  // 关闭数据库连接
}
程序运行结果为:


图 1 使用Command对象添加数据

用Command对象调用存储过程

存储过程可以使管理数据库和显示数据库信息等操作变得非常容易,它是 SQL 语句和可选控制流语句的预编译集合,它存储在数据库内,在程序中可以通过 Command 对象来调用,其执行速度比 SQL 语句快,同时还保证了数据的安全性和完整性。

【实例 2】使用存储过程向数据表中添加编程词典的价格信息。创建一个 Windows 应用程序,在默认窗体中添加两个 TextBox 控件、一个 Label 控件和一个 Button 控件,其中,TextBox 控件用来输入要添加的信息,Label 控件用来显示添加成功或失败的信息,Button 控件用来调用存储过程执行数据添加操作,代码如下:
private void button1_Click(object sender, EventArgs e)
{
    // 创建数据库连接对象
    SqlConnection sqlcon = new SqlConnection("Server=XIAOKE;User Id=sa;Pwd=;Database=db_EMS");
    SqlCommand sqlcmd = new SqlCommand();  // 创建SqlCommand对象
    sqlcmd.Connection = sqlcon;  // 指定数据库连接对象
    sqlcmd.CommandType = CommandType.StoredProcedure;  // 指定执行对象为存储过程
    sqlcmd.CommandText = "proc_AddData";  // 指定要执行的存储过程名称
    // 为@name参数赋值
    sqlcmd.Parameters.Add("@name", SqlDbType.VarChar, 20).Value = textBox1.Text;
    sqlcmd.Parameters.Add("@money", SqlDbType.Decimal).Value = Convert.ToDecimal(textBox2.Text);  // 为@money参数赋值
    if (sqlcon.State == ConnectionState.Closed)  // 判断连接是否关闭
    {
        sqlcon.Open();  // 打开数据库连接
    }
    // 判断ExecuteNonQuery方法返回的参数是否大于0,大于0则表示添加成功
    if (Convert.ToInt32(sqlcmd.ExecuteNonQuery()) > 0)
    {
        label3.Text = "添加成功!";
    }
    else
    {
        label3.Text = "添加失败!";
    }
    sqlcon.Close();  // 关闭数据库连接
}

本实例用到的存储过程代码如下:
CREATE PROCEDURE [dbo].[proc_AddData]
(
    @name varchar(20),
    @money decimal
)
as
begin
    insert into tb_PDic(Name,Money) values(@name,@money)
end
GO
运行程序,本实例的运行效果与实例 1 一样。

相关文章