SqlCommand

SqlCommand 介绍

SqlCommand 用来封装需要执行的SQL语句,依靠已经建立好的数据库连接,向数据库发送指令并获取执行结果。
构造函数支持传入两个参数:SQL文本(cmdText)数据库连接对象(SqlConnection)

简单示例

读者提前安装好SQL server 并且创建好表,这里是用到Article表,并且插入一条记录。

private void button1_Click(object sender, EventArgs e)
{
    // 1. 定义连接字符串
    string connectionString = "User ID=sa;pwd=qweqwe;initial catalog=DB;Data Source=.;";

    // 2. 创建连接对象
    SqlConnection conn = new SqlConnection(connectionString);

    // 3. 定义要执行的SQL语句
    string cmdText = "SELECT GETDATE(),count(1) FROM [DB].[dbo].[Article]";

    // 4. 创建命令对象,绑定SQL与数据库连接
    SqlCommand command = new SqlCommand(cmdText, conn);

    conn.Open();    // 打开数据库连接
    // ExecuteScalar():执行SQL,返回结果集【第一行第一列】的数据,object类型

    object res = command.ExecuteScalar();

    MessageBox.Show(res.ToString());

    conn.Close();   // 关闭连接
}Code language: C# (cs)

SQLserver的表

CREATE TABLE Article(
    id INT PRIMARY KEY IDENTITY(1,1),
    Title NCHAR(10) NULL,
    AddTime NCHAR(10) NULL
);Code language: SQL (Structured Query Language) (sql)

核心方法:ExecuteScalar()

  • 查询聚合结果:COUNT()MAX()MIN()SUM()
  • 查询单个值,例如获取数据库当前时间、自增主键ID

注意:

  1. 返回类型为 object,需要手动强制转换;
  2. 如果SQL查询有多列多行,只会拿到第一行第一列,其余数据直接丢弃;
  3. 调用前必须先执行 conn.Open() 打开连接。

规范写法

推荐使用 using 自动释放连接资源,避免忘记关闭连接造成连接泄漏:

string connectionString = "User ID=sa;pwd=qweqwe;initial catalog=DB;Data Source=.;";
string cmdText = "SELECT GETDATE(),count(1) FROM [DB].[dbo].[Article]";
using (SqlConnection conn = new SqlConnection(connectionString))
{
    SqlCommand command = new SqlCommand(cmdText, conn);
    conn.Open();
    object res = command.ExecuteScalar();
    MessageBox.Show(res.ToString());
}
// 离开using块,自动释放连接,无需手动 conn.Close()Code language: JavaScript (javascript)

补充

SqlCommand 还有另外3个常用执行方法:

  1. ExecuteNonQuery():执行增删改(INSERT/UPDATE/DELETE),返回受影响行数
  2. ExecuteReader():返回DataReader数据流,逐行读取多条查询结果
  3. ExecuteXmlReader():读取XML格式数据(较少使用)

后续的课程,会介绍这些用法。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注