(转载)何时用ExecuteDataSet / ExecuteReader() / ExecuteScalar

摘要:
sda.Fill(ds)//清除SqlCommand cmd中的参数列表。参数。清除();PublicstringGetClass(int id)//获取类名{stringcommText=string。Format(“selectClassNames as[text]fromFAQ_ClasssphereID={0}”,

1、ExecuteDataset

ExecuteDataset会运行你的基本SELECT(选择)查询并生成一个DataSet,然后就能够被绑定到服务器对象上,或者被用来创建DataView(数据视图)。

public static DataSet ExecuteDataSet(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) 


SqlCommand cmd = new SqlCommand(); 

using (SqlConnection conn = new SqlConnection(connectionString)) 

//通过PrePareCommand方法将参数逐个加入到SqlCommand的参数集合中 
PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters); 
SqlDataAdapter sda = new SqlDataAdapter(); 
DataSet ds = new DataSet(); 
sda.Fill(ds); 
//清空SqlCommand中的参数列表 
cmd.Parameters.Clear(); 
return ds; //注意:这里改了 

}

2、ExecuteReader

ExecuteReader主要是用于查询语句(SELECT),它是为了提高运行性能而设置的。SqlDataReaders很类似于经典 ADO里的只能向前的只读记录集(即类似ASP中的movenext),它们对于填充ListBoxe控件和CheckBoxList控件很有用处。对ExecuteReader的调用看起来就像是一个ExecuteDataset。要记住,它需要命名空间为System.Data.SqlClient:

所以以后如果SQL语句中,只要是查找单条的数据中的某个字段或全部字段时,如select top 1 * from XX where id=xx;用DataSet (即ExecuteDataSet ),但是如果说满足id=xx的结果有很多个数据,此时用ExecuteReader,因为它能够查询出“只读的向前的数据流”(如ASP中的movenext 一样,明白了吧,哈哈),如果此时用ExecuteDataSet就错了,更何况ExecuteReader读取数据的效率会比ExecuteDataSet高

如:

public string GetClass(int id) //获取类别名称
        {
            string commText = string.Format("select ClassName as [text] from FAQ_Class where ID={0}", id);
            DataSet ds = db.ExecuteDataSet(CommandType.Text, commText);
            return ds.Tables[0].Rows[0]["text"].ToString();//在位置 0 处没有任何行。
        }

public DataSet GetTitle(int recordCount, decimal id) //获取类别对应的前6条标题
        {
            string commText = string.Format("select top {0} ID,Title as [Title] from FAQ_List where ClassID like '{1}%' and Rechecked=1 order by OrderID desc", recordCount, id);
            return db.ExecuteDataSet(CommandType.Text, commText);
        }

public DataRowView GetSingleResult(int id) //获取单条记录
        {
            DataRowView result = null;
            DataSet ds = db.ExecuteDataSet(CommandType.Text, string.Format("select * from FAQ_List where id={0}", id));
            if (ds != null && ds.Tables[0] != null && ds.Tables[0].DefaultView.Count > 0)//ds/表/数据行不为空(程序严紧,周全性)
            {
                result = ds.Tables[0].DefaultView[0];
            }
            return result;
        }


public IDataReader GetClassName(int id) //查找ClassName
        {
            string commText = string.Format("select ID as ID,ClassName as ClassName from FAQ_Class where ParentID=0 order by OrderID desc,ID desc", id);
            return db.ExecuteReader(CommandType.Text, commText);
        }

3.对于使用ExecuteScalar(),返回查询出来的结果集中的第一行第一列,虽然返回的值的数据类型可以是string,int。。。但msdn.com微软上说:

使用 ExecuteScalar 方法从数据库中检索单个值(例如一个聚合值)。与使用 ExecuteReader 方法,然后使用 SqlDataReader 返回的数据执行生成单个值所需的操作相比,此操作需要的代码较少。所以我习惯在count(字段)才用ExecuteScalar,如:

public int SelClass(decimal id) //添加类别
        {
            string commText = string.Format("select Count(id) as [Count] from FAQ_List where ClassID like '{0}%'", id);
            return Convert.ToInt32(db.ExecuteScalar(CommandType.Text, commText));
        }

免责声明:文章转载自《(转载)何时用ExecuteDataSet / ExecuteReader() / ExecuteScalar》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇d3js技术文档在Web应用中接入微信支付的流程之极简清晰版下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

窗口函数——数据分析

oracle的分析函数over 及开窗函数   转自:http://www.blogjava.net/loocky/archive/2007/11/13/160213.html     http://www.cnblogs.com/icebutterfly/archive/2009/08/05/1539657.html   一:分析函数overOracl...

Hive的基本操作

一、创建数据库   hive>create database mydb ; //hql和mysql语法极其相似   hive>show databases;//查看所有数据库 二、创建表   格式:     create [external] table <表名>(列的定义,....)  [row format delimited...

Jmeter接口测试01

Jmeter 简介   Apache JMeter 是 Apache 组织的开放源代码项目,是一个纯 Java 桌面应用,用于压力测试和性能测试。它最初 被设计用于 Web 应用测试但后来扩展到其它测试领域。   Jmeter 功能   • 能够对 HTTP 和 FTP 服务器进行压力和性能测试, 也可以对任何数据库进行同样的测试(通过 JDBC)。  ...

数据不平衡的相关

数据不平衡的数据处理 1. 前言 什么是不平衡数据呢?顾名思义即我们的数据集样本类别比例不均衡。数据不平衡问题主要存在于有监督机器学习任务中。当遇到不平衡数据时,以总体分类准确率为学习目标的传统分类算法会过多地关注多数类,从而使得少数类样本的分类性能下降。绝大多数常见的机器学习算法对于不平衡数据集都不能很好地工作。     1.1 数据不平衡例子...

C#基本面试题

重写和重载 重写: 要求:(三大同)参数相同,方法名相同,返回值相同 关键字:基类函数用virtual修饰,派生类用override修饰 注意:不能重写非虚方法或静态方法 重载: 要求:在同一作用域,可以存在相同的函数名,不同参数列表的函数,这组函数称为重载函数 其他 WebAPI和MVC的区别 1、MVC主要用于建站,WebAPI主要用于构建http...

scapy安装及SCTP包分析

关于Scapy scapy是一个强大的交互式数据包处理程序(使用python编写)。它能够伪造或者解码大量的网络协议数据包,能够发送、捕捉、匹配请求和回复包等。它可以很容易地处理一些典型操作,比如端口扫描、tracerouting,探测,单元测试,攻击或网络发现(可替代hping,NMAP,arpspoof,ARP-SK,arping,tcpdump,te...