本博文简单介绍一下SQL Server中常用的几类查询及相关使用的方法。
一、ExecuteScalar方法获取单一值
ExecuteScalar方法是SqlCommand类的方法之一,执行查询,并返回查询所返回的结果集中的第一行第一列。
class Program
{
static void Main(string[] args)
{
string strCon = "Data Source=192.168.24.193;Initial Catalog=charge_sys;User ID=sa;Password=123456";
using (SqlConnection con = new SqlConnection(strCon))//使用连接池,使用完后自动关闭连接
{
using (SqlCommand cmd = con.CreateCommand())
{
string sql = "select count(*) from User_Info";//定义sql语句,查询整个表的行数
cmd.CommandText = sql;
con.Open();
int count = Int32.Parse(cmd.ExecuteScalar().ToString()); //返回整个结果集的首行首列,是一个Object类型
Console.WriteLine(count);
cmd.CommandText = "select * from User_Info";//定义sql语句
string s = cmd.ExecuteScalar().ToString(); //返回整个User_Info表的第一行并赋给字符串s
Console.WriteLine(s);//将结果打印输出
Console.ReadLine();
}
}
} 执行结果如下图:

二、ExecuteNonQuery方法执行增删改操作
ExecuteNonQuery方法也是SqlCommand的方法之一,对连接执行T-SQL语句并返回受影响的行数。举例:
static void Main(string[] args)
{
string strCon = "Data Source=192.168.24.193;Initial Catalog=charge_sys;User ID=sa;Password=123456";
using (SqlConnection con = new SqlConnection(strCon))//使用连接池,使用完后自动关闭连接
{
using (SqlCommand cmd = con.CreateCommand())
{
///数据操作语言,增删改查
string ins = "insert into User_Info (userID) values ('123')";
con.Open();//连接数据库
cmd.CommandText = ins;
int res = cmd.ExecuteNonQuery(); //执行SQL语句返回受影响的行数
if (res > 0)
{
Console.WriteLine("成功插入" + res + "条记录");
}
else
{
Console.WriteLine("插入失败");
}
Console.ReadLine();
}
}
} 执行结果如下图:

三、BeginExecuteReader()和EndExecuteReader()异步查询大结果集
所谓异步查询大结果集,就是如果数据量非常大,那么在开始执行查询和结束查询这一过程中可能会需要耗费一段时间,在这段时间我们也可以让我们的程序去干一些别的事,就有了上述两种方法。举例:
static void Main(string[] args)
{
string strCon = "Data Source=192.168.24.193;Initial Catalog=charge_sys;User ID=sa;Password=123456";
using (SqlConnection con = new SqlConnection(strCon))//使用连接池,使用完后自动关闭连接
{
using (SqlCommand cmd = con.CreateCommand())
{
//异步查询大结果集
cmd.CommandText = "waitfor delay '00:00:05' ;select * from User_Info"; //延迟5秒连接数据库
con.Open();
IAsyncResult iar=cmd.BeginExecuteReader();
//BeignExecuteReader方法判断异步查询是否完成
//此处可以写入其他数据库操作
SqlDataReader sdr= cmd.EndExecuteReader(iar);
//EndExecuteReader方法结束连接,并把数据存储到数据集中
while (sdr.Read())
{
Console.WriteLine(sdr[0]+" "+sdr[1]);
}
Console.ReadLine();
}
}
} 由于延迟了5秒中,所以输出结果在5秒以后才出现如下:

四、执行批量查询操作
一般我们在用SQL语句查询时只是查询到一条记录,那么如何在一个表中同时插入或者更新多条记录呢,这就用到了多天T-SQL语句。举例:
class Program
{
static void Main(string[] args)
{
string strCon = "Data Source=192.168.24.193;Initial Catalog=charge_sys;User ID=sa;Password=123456";
using (SqlConnection con = new SqlConnection(strCon))//使用连接池,使用完后自动关闭连接
{
using (SqlCommand cmd = con.CreateCommand())
{
//执行批量操作查询,同时执行多条SQL语句
string sql = "update User_Info set UserName ='888' where userID ='2'"
+ "update User_Info set UserName ='999' where userID ='3'";
//将两条T-SQL语句连接
con.Open();//打开数据库
cmd.CommandText = sql;
int res = cmd.ExecuteNonQuery(); //执行SQL语句返回受影响的行数
if (res > 0)
{
Console.WriteLine("成功插入" + res + "条记录");
}
else
{
Console.WriteLine("插入失败");
}
Console.ReadLine();
}
}
} 执行结果如下:

五、参数化查询
我们在刚开始学习在应用程序中编写SQL语句时,一般使用拼接字符串,单引号、双引号什么都有,编写起来很不方便,而且容易被SQL注入破