DataReader对象提供一个单向向前移动且只读的记录集合,可以读取由Command对象执行的命令所产生的数据,只能与Command对象一起使用。当Command对象执行SQL命令后,产生执行的数据,于是会自动产生DataReader对象,我们可以使用DataReader对象读取数据。操作方式是一次循序读取一条记录,只能读且结合Command对象操作。
因DataReader对象会由Command对象执行时自动产生,所以只要声明一个变量接收,将DataReader对象传入Command对象的Execute()方法中,或是将SQL指令执行的结果赋值给Command对象的ExecuteReader()法即可。声明格式如下:
Dim变量名称As oLEDBDataReader
Command对象名称.Execute(DataReader对象名称) 或
DataReader对象名称=Command对象名称.ExecuteReader() 譬如:
protected void Button3_Click(object sender, EventArgs e)
{
string sql;
sql = "select * from file where id= 8 ";
OleDbConnection Conn1 = dbcenter.Acc_Conn();
Conn1.Open();
OleDbCommand cmd= new OleDbCommand(sql, Conn1);//定义为可执行命令的对象
OleDbDataReader reader= cmd.ExecuteReader();//定义为可执行命令下的可执行读对象,我这样理解的
while (reader.Read())
{
Label2.Text = reader.GetValue(5).ToString ();
}
reader.Close();
Conn.Close();
}
编译运行调试通过,结果,当然就出来我想要的结果,该行第6列的值了。他把值从数据库中读出来,这样应用就广泛极了,可以和很多控件结合实现功能,如图片显示,把路径输出.当然之前要数据入库了,显示语句如:
Image1.ImageUrl = "upfile/" + reader.GetValue(4).ToString()+"/"+"1.jpg" 或者
reader.GetValue(reader .GetOrdinal ("date_year")).ToString() 其实文件名也可以在数据库中读出.
reader.GetValue(reader .GetOrdinal ("date_year")).ToString() 是类似嵌套读取出数据库中date_year字段的值
哈哈,以前该单元认识很模糊,现在算明白了。
附说明:(转贴教材)
DataReader对象的属性说明:
RowFetchCount 设置取回的记录数,默认值为1笔
Item DataReader 集合对象,可利用索引值取得各字段中的数据
IsClosed DataReader 对象是否关闭
HasMoreRows 未读取的数据
HasMoreResults 是否有多项结果
FieldCount 数据记录的字段数(只读)
Item属性可以读取字段值,利用索引值读取。格式如下:
DataReader对象名称.Item(索引值)
其中索引值可以使用“字段顺序数字”,自0起算,第一个字段索引值为0,第二个字段索引值为1,依此类推;也可以使用“字段名称”。
DataReader对象的方法说明:
Read 读取下一条记录,有记录返回Tme,没有记录则返回False
NextResult 取得下一个结果
IsNull(i) 判断字段中是否为Null值(i为宁段编号)
GetValues 取得所有字段值
GetValue 取得赋值字段值
GetOrdinal(字段名) 取得赋值字段名称的顺序
getName(i) 取得赋值字段名称(i为字段编号)
GetDataTypeName(i) 取得赋值字段的数据类型(i为字段编号)
Close 关闭DataReader对象
· Read方法
此方法可使:DataReader对象读取数据,一次读取一条,若读取成功,中国自学编程网首发,http://www.zxbc.cn/"/",则返回True,若无数据或读取失败,则返回False。一般可以结合一个循环来读取数据,范例如下:
do while dre.Read()
loop
· GetName方法
此方法可以读取字段名称,格式如下:
Data:Reader对象名称.GetName(字段索引值)
其中字段索引值可代表字段顺序,第一个字段索引值为0,第二个字段索引值为1,依此类推。
· GetlDataTypeName方法
此方法可取得字段的数据类型,格式如下:
Data.Reader对象名称.GetDataTypeName(宁段索引值)[Page]
· Getordinal方法
此方法可以取得字段名称对应字段顺序编号,格式如下:
Data.Reader对象名称.Getordinal(字段名称)
· GetValue方法
此方法可以取得字段值,与Item属性相同,但只能接受索引值为字段顺序编号。格式如下:
DataReader对象名称.GetValue(索引值)
· GetValues方法
此方法可以取得所有的字段值,通常可声明一个数组放入所有的字段。格式如下:
Dim数组名(DataReader对象名称.FieldCount)
DataReader对象名称.GetValues(数组名)
· IsNull方法
此方法判断字段的内容是否为空数据,是则返回True,不是则返回False,格式如下:
DataReader对象名称.IsNull(字段索引值)
由
using System.库
OleDbCommand cmd= new OleDbCommand(sql, Conn1);//定义为可执行命令的对象
OleDbDataReader reader= cmd.ExecuteReader();//定义为可执行命令下的可执行读对象,我这样理解的
while (reader.Read())
{
Label2.Text = reader.GetValue(5).ToString ();
}
reader.Close();从以上知道,可以这样操作数据库
1、string sql_menu_1 = "update table set menu1='"+TextBox[i-1].Text +"'where id="+i;
OleDbCommand cmd = new OleDbCommand(sql_menu_1 ,conn );
cmd.ExecuteNonQuery();
2、OleDbCommand cmd = conn.CreateCommand();
cmd.CommandText = "update table set menu7='" + TextBox[i - 1].Text + "'where id=" + i;
cmd.ExecuteNonQuery();
3、
又例如: conn.open();
string sql = "select * from site_inf_xxx";
OleDbCommand cmd = new OleDbCommand(sql, conn);//定义为可执行命令的对象
OleDbDataReader reader = cmd.ExecuteReader();
if (reader.Read ())
{
site_name = reader["site_name"].ToString(); //获得想要的数据值
site_logo = reader["site_logo"].ToString();
site_picture = reader["site_picture"].ToString();
school_pic_type = site_picture.Substring(site_picture.LastIndexOf(".") + 1);//获得图片类型是jpg or swf
}
reader.Close();
conn.Close();
看一个例子,读取数据库,用户和密码,登陆
protected void Button1_Click(object sender, EventArgs e)
{
db d1 = new db();
string path = d1.accessdb2();
conn = new OleDbConnection(path);
conn.Open();
string sql = "select admin_name,admin_password from admin ";
string pass_name = null;
string pass_word = null;
OleDbCommand comm = new OleDbCommand(sql, conn);
OleDbDataReader odr = comm.ExecuteReader();
while (odr.Read())
{
//pass_word = string.Format("{0}", odr[0]); 原读法
pass_name = odr.GetValue(odr.GetOrdinal("admin_name")).ToString();
pass_word = odr.GetValue(odr.GetOrdinal("admin_password")).ToString();
}
odr.Close();
conn.Close();
if (name.Value ==pass_name && password.Value == pass_word)
{
Session["admin"] = "adminlogin";
Response.Redirect("index.aspx");
}
else
{
Response.Write("<script>alert('用户名或密码错误')</script>");
}
}