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
注意:
- 返回类型为
object,需要手动强制转换; - 如果SQL查询有多列多行,只会拿到第一行第一列,其余数据直接丢弃;
- 调用前必须先执行
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个常用执行方法:
ExecuteNonQuery():执行增删改(INSERT/UPDATE/DELETE),返回受影响行数ExecuteReader():返回DataReader数据流,逐行读取多条查询结果ExecuteXmlReader():读取XML格式数据(较少使用)
后续的课程,会介绍这些用法。
Previous: 介绍和连接
Next: CommandTimeout