博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
DataReader方式 获取数据的操作
阅读量:5823 次
发布时间:2019-06-18

本文共 5053 字,大约阅读时间需要 16 分钟。

 

一、使用DataReader读取为对象List

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
/// <summary>
/// 获得数据列表List<>,DataReader 使用参数的
/// </summary>
/// <param 
name
=
"strWhere"
>条件</param>
/// <param 
name
=
"ht"
>HashTable,保存参数名及参数对应的值</param>
/// <
returns
>List<DotNet.Model.Base_Department></
returns
>
/// 使用方法:string str = 
"id=@id"
;Hashtable ht = new Hashtable();ht.
Add
(
"@id"
, 10);
public 
List<DotNet.Model.Base_Department> GetListUseDataReader(string strWhere, Hashtable ht=
null
)
{
    
StringBuilder strSql = new StringBuilder();
    
strSql.Append(
"Select Id,DepartmentName,NetCount,Remarks,CreatedOn,IsPublic,IsLock,SavedOn,LockVersion,Operator_Id from Base_Department"
);
    
if(strWhere.Trim().Length!=0)
    
{
        
strSql.Append(
" Where " 
+ strWhere.Trim());
    
}
    
//获取DataReader
    
SqlDataReader reader;
 
 
    
//组织参数
    
if (ht != 
null 
&& ht.
Count 
> 0)
    
{
        
SqlParameter[] parameters = new SqlParameter[ht.
Count
];
        
int 
i = 0;
        
foreach (DictionaryEntry dc 
in 
ht)
        
{
            
parameters[i] = new SqlParameter() ;
            
parameters[i].ParameterName = dc.
Key
.ToString();
            
parameters[i].Value = dc.Value;
            
i++;
        
}
         
reader = DbHelperSQL.ExecuteReader(strSql.ToString(), parameters);
    
}
    
else
        
reader = DbHelperSQL.ExecuteReader(strSql.ToString());
    
if (reader.HasRows)
    
{
        
List<DotNet.Model.Base_Department> list = new List<DotNet.Model.Base_Department>();
        
while (reader.
Read
())
        
{
            
DotNet.Model.Base_Department model = new DotNet.Model.Base_Department();
            
model.Id = reader.GetInt64(reader.GetOrdinal(
"Id"
));
            
model.DepartmentName = reader.GetString(reader.GetOrdinal(
"DepartmentName"
));
            
model.NetCount = reader.GetInt32(reader.GetOrdinal(
"NetCount"
));
            
model.Remarks = reader.GetString(reader.GetOrdinal(
"Remarks"
));
            
model.CreatedOn = reader.GetDateTime(reader.GetOrdinal(
"CreatedOn"
));
            
model.IsPublic = reader.GetBoolean(reader.GetOrdinal(
"IsPublic"
));
            
model.IsLock = reader.GetBoolean(reader.GetOrdinal(
"IsLock"
));
            
model.SavedOn = reader.GetDateTime(reader.GetOrdinal(
"SavedOn"
));
            
model.LockVersion = reader.GetInt32(reader.GetOrdinal(
"LockVersion"
));
            
model.Operator_Id = reader.GetInt64(reader.GetOrdinal(
"Operator_Id"
));
            
list.
Add
(model);
        
}
        
reader.
Close
();
        
return 
list;
    
}
    
else
    
{
        
reader.
Close
();
        
return 
null
;
    
}
}

 

二、使用DataReader对象读取数据

2.1 DataReader对象简介

DataReader对象又称数据阅读器,是DBMS所特有的,常用来检索大量的数据。DataReader对象是以连接的方式工作,它只允许以只读、顺向的方式查看其中所存储的数据,并在ExecuteReader方法执行期间进行实例化。

根据.NET Framework数据提供程序不同,DataReader也可以分成SqlDataReader、OleDbDataReader等。DataReader与底层数据库密切相联,它实际上是一个流式的DataSet。可以参照下一节的DataSet对象与之比较学习,下面我们将着重介绍SqlDataReader。

2.2 SqlDataReader对象常用属性

SqlDataReader对象常用属性如下:

 

  

   

FieldCount

获取当前行的列数

RecordsAffected

获取执行SQL语句所更改、添加或删除的行数

表1 SqlDataReader对象常用属性

 

2.3 常用属性

SqlDataReader对象的常用属性。

l   FieldCount属性

获取DataReader对象中有几行数据,默认值为-1。如果未放在有效的记录集中,属性值则为0;否则为当前行中的列数。

l   RecordsAffected属性

直到所有的行都被读取并且数据阅读器已经关闭时,才设置RecordsAffected属性,其默认值为−1。该属性的值是累积值。例如,如果以批处理模式插入3个记录,则RecordsAffected属性的值将为3。

SqlDataReader对象常用方法

SqlDataReader对象常用方法如下:

 

  

   

Read

使DataReader对象前进到下一条记录(如果有)

Close

关闭DataReader对象。注意,关闭阅读器对象并不会自动关闭底层连接

Get

用来读取数据集的当前行的某一列的数据数据

表2 SqlDataReader对象常用方法

2.4 常用方法

SqlDataReader对象常用方法详解

l   Read方法

语法:public override bool Read ()

返回值:如果存在多个行,则为True;否则为False。

DataReader对象中的Read()方法用来遍历整个结果集,不需要显示地向前移动指针,或者检查文件的结束,如果没有要读取的记录了,则Read方法会自动返回False。

注意:要使用SqlDataReader,必须调用SqlCommand对象的ExecuteReader()方法来创建,而不要直接使用构造函数。

 

SqlDataReader对象的应用

实例  使用SqlDataReader对象读取数据(源程序详见光盘中例6.6)

本示例主要讲解在ASP.NET应用程序中如何使用SqlDataReader对象读取数据库中的数据。执行程序,运行结果如图6.11所示:

 

图1 读取数据的结果图

 

程序实现的步骤:

(1)、新建一个网站,默认主页是Default.aspx。

(2)、在Web.Config文件中配置数据库连接字符串,在<configuration>下的子配置节<connectionStrings>添加连接字符串。

(3)、向Default.aspx页中添加一个label控件将其命名为lblStudent,在Page_Load中写下如下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
protected 
void 
Page_Load(
object 
sender, EventArgs e)
{
        
if 
(!IsPostBack)
        
{
            
SqlConnection myConn = GetConnection();
            
string 
sqlStr = 
"select * from tbStudent"
;  
//查询所有学生信息的SQL
            
SqlCommand myCmd = 
new 
SqlCommand(sqlStr, myConn);
//创建Command对象
            
try
            
{
                
myConn.Open();
                
//执行SQL语句,并返回DataReader对象
                
SqlDataReader myDr = myCmd.ExecuteReader();
                
//显示标题文字
                
this
.lblStudent.Text = "&nbsp&nbsp&nbsp学号
                
&nbsp&nbsp&nbsp 姓名
                
&nbsp&nbsp&nbsp 性别
               
&nbsp&nbsp&nbsp 班级
                
&nbsp&nbsp&nbsp 系别<br>";
              
while 
(myDr.Read())          
//循环读取结果集
                
{
                       
//读取数据库中的信息并显示在界面中
                      
this
.lblStudent.Text +=myDr[
"sno"
].ToString().Trim()
                              
"&nbsp&nbsp&nbsp&nbsp"
                              
+ myDr[
"sname"
].ToString().Trim()
                              
"&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp"
                              
+ myDr[
"ssex"
].ToString().Trim()
                              
"&nbsp&nbsp&nbsp&nbsp"
                              
+ myDr[
"sclass"
].ToString().Trim()
                              
"&nbsp&nbsp&nbsp&nbsp"
                              
+myDr[
"sdept"
].ToString().Trim()
                              
+
"</br>"
;
                
}
                
myDr.Close();            
//关闭DataReader
            
}
            
catch
            
{
                
Response.Write(
"连接失败!"
); 
//异常处理
            
}
            
finally
            
{
                
myConn.Close();      
//关闭数据库连接
            
}
        
}
}                       

 

 

 

参考文章

1. , 

2. 悠哲RHT

 

没有整理与归纳的知识,一文不值!高度概括与梳理的知识,才是自己真正的知识与技能。 永远不要让自己的自由、好奇、充满创造力的想法被现实的框架所束缚,让创造力自由成长吧! 多花时间,关心他(她)人,正如别人所关心你的。理想的腾飞与实现,没有别人的支持与帮助,是万万不能的。
   本文转自wenglabs博客园博客,原文链接:http://www.cnblogs.com/arxive/p/5822523.html
,如需转载请自行联系原作者
你可能感兴趣的文章
大学生轻信网上“代×××”被骗
查看>>
cisco路由器IOS恢复方法之ROMMON恢复
查看>>
搭建[ rsyslog+loganalyzer+mysql ] lamp组合型日志服务器
查看>>
Python动手练习之购物车面对对象版本
查看>>
【yii】让module支持theme
查看>>
[20171115]ZEROCONF ROUTE.txt
查看>>
mysql中文编码问题
查看>>
javascript--对象
查看>>
mac下修改mysql的密码
查看>>
Netty实现原理浅析
查看>>
手机吸费软件肆意捞金,通过代码签名证书加以防范
查看>>
C语言作业06--结构体&文件
查看>>
Notepad++ xml/json格式化
查看>>
Android Studio查找功能(搜索功能)及快捷键
查看>>
两个WPF案例——花纹,变色立方体
查看>>
[转] 函数声明和函数表达式——函数声明的声明提前
查看>>
getUserMedia 测试地址
查看>>
CRUD全栈式编程概述
查看>>
spiral matrix
查看>>
《你必须知道的.NET》读后小结(3)
查看>>