SQL Server中的查询

      本博文简单介绍一下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注入破坏敏感数据,既不安全,由此我们引入了参数化查询,顾名思义,就是将要查询的内容用参数代替。看下面的例子:

      

<span style="font-family:Times New Roman;">static void Main(string[] args)
        {
            string conStr = "Data Source=192.168.24.193;Initial Catalog=charge_sys;User ID=sa;Password=123456";
            using (SqlConnection con = new SqlConnection(conStr))
            {

                using (SqlCommand cmd = con.CreateCommand())
                {
                    cmd.CommandText  = "select * from User_Info where [email protected]";
                    //第一种方法
                    //SqlParameter param = new SqlParameter();
                    //param.ParameterName = "username";
                    //param.SqlDbType = SqlDbType.Char;
                    //param.Size = 10;
                    //param.Value = "admin";
                    //con.Open();

                    //第二种方法,直接使用AddWithValue方法直接给参数赋值

                    cmd.Parameters.AddWithValue("@userid", '1');
                    con.Open();
                    SqlDataReader sdr = cmd.ExecuteReader();
                    while(sdr.Read())
                    {
                        Console.WriteLine(sdr[0]+"   "+sdr[1]);
                    }
                    Console.ReadLine();
                }
            }
        }

</span>

      六、MuHipleActiveResultSet方法执行多活动结果集

一般一个Connection对象只支持一个活动操作,如果我们需要添加另外一个或其他的或,在SQL连接语句后加上MuHipleActiveResultSet=True即可。这里就不在演示了,希望本博文能给您带来一些帮助。

      

      

SQL Server中的查询,布布扣,bubuko.com

时间: 2024-12-24 07:39:12

SQL Server中的查询的相关文章

SQL SERVER中XML查询:FOR XML指定PATH

SQL SERVER中XML查询:FOR XML指定PATH 前言 在SQL SERVER中,XML查询能够指定RAW,AUTO,EXPLICIT,PATH.本文用一些实例介绍SQL SERVER中指定PATH的XML查询. PATH參数 PATH('參数'),參数是用来重命名ROW的,ROW是默认生成的名称. select 'Hui' for xml path  结果:<row>Hui</row> select 'Hui' for xml path ('root') 结果:<

sql server中分布式查询随笔(链接服务器(sp_addlinkedserver)和远程登录映射(sp_addlinkedsrvlogin)使用小总结)

由于业务逻辑的多样性,经常得在sql server中查询不同数据库中数据,这就产生了分布式查询的需求 现我将开发中遇到的几种查询总结如下: 1.access版本 --建立连接服务器 EXEC sp_addlinkedserver --要创建的链接服务器名称  'ai',             --产品名称               'access',     --OLE DB 字符 'Microsoft.Jet.OLEDB.4.0',  --数据源 --格式: -- 盘符:\路径\文件名 -

【转载】SQL Server中查询CPU占用高的SQL语句

本文导读:触发器造成死锁.作业多且频繁.中间表的大量使用.游标的大量使用.索引的设计不合理.事务操作频繁.SQL语句设计不合理,都会造成查询效率低下.影响服务器性能的发挥.我们可以使用sql server自带的性能分析追踪工具sql profiler分析数据库设计所产生问题的来源,进行有针对性的处理:下面介绍SQL Server中如何查询CPU占用高的SQL语句 SQL Server中查询CPU占用高的情况,会用到sys.sysprocesses ,dm_exec_sessions ,dm_ex

Microsoft SQL Server中条件字段是Nvarchar类型的,条件有中文的无法查询的原因及处理方法

条件中带的是中文无法查询出,因为字段sender_su_name是nvarchar类型的,需要前面接个N SELECT * FROM [test].[dbo].[Ship_User_Email]  WHERE [sender_su_name]=N'奖励' 为什么要带N如下解释: 使用 Unicode 数据 Unicode 标准为全球商业领域中广泛使用的大部分字符定义了一个单一编码方案.所有的计算机都用单一的 Unicode 标准 Unicode 数据中的位模式一致地翻译成字符.这保证了同一个位模

在SQL Server中为什么不建议使用Not In子查询

原文:在SQL Server中为什么不建议使用Not In子查询     在SQL Server中,子查询可以分为相关子查询和无关子查询,对于无关子查询来说,Not In子句比较常见,但Not In潜在会带来下面两种问题: 结果不准确 查询性能低下       下面我们来看一下为什么尽量不使用Not In子句.   结果不准确问题     在SQL Server中,Null值并不是一个值,而是表示特定含义,其所表示的含义是"Unknow",可以理解为未定义或者未知,因此任何与Null值

在 SQL Server 中查询EXCEL 表中的数据遇到的各种问题

原文:在 SQL Server 中查询EXCEL 表中的数据遇到的各种问题 SELECT * FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0','Data Source="D:\KK.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...[Sheet1$] 问题: 消息 15281,级别 16,状态 1,第 1 行 SQL Server 阻止了对组件 'Ad Hoc Di

sql server中的分页数据查询

1.引言 今天在工作中遇到一个需要进行sql server分页数据查询的问题,但是分页数据查询的sql却忘记了,最终通过查询资料解决了该问题.现在把解决方法记下,以备查阅. 在这里需要感谢博客园的Qlin 2.数据分页语句 假设需要查询表为Test,Test表中有个字段为ID(我这里用的是int型),当前页pageIndex=5,页大小pageSize=10.则分页查询语句如下: SELECT * FROM ( SELECT ROW_NUMBER() OVER (ORDER BY ID) AS

T-SQL查询进阶—理解SQL Server中的锁

在SQL Server中,每一个查询都会找到最短路径实现自己的目标.如果数据库只接受一个连接一次只执行一个查询.那么查询当然是要多快好省的完成工作.但对于大多数数据库来说是需要同时处理多个查询的.这些查询并不会像绅士那样排队等待执行,而是会找最短的路径执行.因此,就像十字路口需要一个红绿灯那样,SQL Server也需要一个红绿灯来告诉查询:什么时候走,什么时候不可以走.这个红绿灯就是锁. 图1.查询可不会像绅士们那样按照次序进行排队 为什么需要锁 在开始谈锁之前,首先要简单了解一下事务和事务的

SQL Server中查询用户的对象权限和角色的方法

--SQL Server中查询用户的对象权限和角色的方法 -- 查询用户的object权限 exec sp_helprotect NULL, 'sa' -- 查询用户拥有的role exec sp_helpuser 'public' -- 查询哪些用户拥有指定的系统role exec sp_helpsrvrolemember 'sysadmin' -- 可查询嵌套role WITH tree_roles as ( SELECT role_principal_id, member_principa