C#中Mysql读取字段值

http://blog.csdn.net/yanjun_xiaoli/article/details/4002736
1. 创建DataReader对象 前面提到过没有构造函数创建DataReader对象。
通常我们使用Command类的ExecuteRader方法来创建DataReader对象:
 SqlCommand cmd = new SqlCommand(commandText,ConnectionObject) 
SqlDataReader dr = cmd.ExecuteReader(); 
DataReader类最常见的用法就是检索Sql查询或者存储过程返回的记录。
它是连接的只向前和只读的结果集,也就是使用它时,数据库连接必须保持打开状态,另外只能从前往后遍历信息,不能中途停下修改数据。 
注意:DataReader使用底层的连接,连接是它专有的,这意味这DataReader打开时不能使用对应连接进行去他操作,比如执行另外的命令等。
使用完DataReader后一定记得关闭阅读器和连接。
 
 2. 使用命令行为指定DataReader的特征 前面我们使用cmd.ExecuteReader()实例化DataReader对象,其实这个方法有重载版本,接受命令行参数,这些参数应该时Commandbehavior枚举: SqlDataRader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection); 
上面我们使用的是CommandBehavior.CloseConnection,作用是关闭DataReader的时候自动关闭对应的ConnectionObject。
这样可以避免我们忘记关闭DataReader对象以后关闭Connection对象。
别告诉我你不喜欢这个参数,你能保证你记得关闭连接。
万一你忘记了呢?又或者你使用你的partner开发的组件来进行开发呢?
这个组件并不一定让你有关闭连接的权限哦。
另外CommandBehavior.SingleRow可以使结果集返回单个行,CommandBehavior.SingleResult返回结果为多个结果集的第一个结果集。
当然Commandbehavior枚举还有其他值,请参见msdn。
 
 3. 遍历DataReader中的记录 当ExecuteReader方法分会DataReader对象时,当前光标的位置时第一条记录的前面。必须调用数据阅读器的Read方法把光标移动到第一条记录,然后第一条记录就是当前记录。
如果阅读器包含的记录不止一条,Read方法返回一个bool值true。
也就是说Read方法的作用是在允许范围内移动光标位置到下一记录,有点类似rs.movenext,不是吗?如果当前光标指示着最后一条记录,此时调用Read方法得到false。
我们经常这样做: While(dr.Reader()) { //do something with the current record } 注意,如果你对每一条记录的操作可能花费比较长的时间,那么意味着阅读器将长时间打开,那么数据库连接也将维持长时间的打开状态。此时使用非连接的DataSet或许更好一些。 
 
4. 访问字段的值 有2种方法。第一种是Item属性,此属性返回字段索引或者字段名字对应的字段的值。第二种是Get方法,此方法返回有字段索引指定的字段的值。有点难以理解,不是吗?不要紧,看例子就OK了。 Item属性 每个DataReader类都定义一个Item属性。比如现在我们有一个DataReader实例dr,对应的sql语句是select Fid,Fname from friend,则我们可以使用下面的方法取得返回的值:
 object ID = dr[“Fid”]; object Name = dr[“Fname”]; 
或者: object ID = dr[0]; object Name = dr[0]; 注意索引总是从0开始的。
另外也许您发现了我们使用的是object来定义对ID和Name,是的,Item属性返回的值是object型,但是您可以强制类型转换。 int ID = (int)dr[“Fid”]; string Name = (string)dr[“Fname”]; 记住:确保类型转换的有效性是您自己的责任,否则您将得到异常。 Get方法 起始我们在第一篇文章里面已经使用过改方法了。
每个DataReader都定义了一组Get方法,比如GetInt32方法把返回的字段值作为.net clr 32位证书。
同上面的例子一样我们用如下方式访问Fid和Fname的值: 
int ID = dr.GetInt32(0); 
string Name = dr.GetString(1); 
注意虽然这些方法把数据从数据源类型转化为.net数据类型,但是他们不执行其他的数据转换,比如他们不会把16位整数转换为32位的。所以您必须使用正确的Get方法。
另外Get方法不能使用字段名来访问字段,也就是说上面的没有: int ID = dr.GetInt32(“Fid”); //错误 string Name = dr.GetString(“Fname”); 
//错误 显然上面这个缺点在某些场合是致命的,当你的字段很多的时候,或者说你过了一段时间以后再来看你这些代码,你会觉得很难以理解!当然我们可以使用其他方法来尽量解决这个问题。一个可行的办法是使用
const: const int FidIndex = 0; 
const int NameIndex = 1; 
int ID = dr.GetInt32(FidIndex); 
string Name = dr.GetString(NameIndex); 
这个办法并不怎么好,另外一个好一些的办法:
 int NameIndex = dr.GetOrdinal(“Fname”); //取得Fname对应的索引值
 string Name = dr.GetString(NameIndex); 
这样似乎有点麻烦,但是当须要遍历阅读器种大量的结果集的时候,这个方法很有效,因为索引只需执行一次。
 int FidIndex = dr.GetOrdinal(“Fid”); 
int NameIndex = dr.GetOrdinal(“Fname”); 
while(dr.Read()) 
{
 int ID = dr.GetInt32(FidIndex);
 string Name = dr.GetInt32(NameIndex); 
}

http://www.xinfengit.com/200907/0929315.html

datareader对象提供只读单向数据的快速传递,单向:您只能依次读取下一条数据;只读:DataReader中的数据是只读的,不能修改;相对地,DataSet中的数据可以任意读取和修改. 它有一个很重要的方法,是Read,是个布尔值,作用是前进到下一条数据,一条条的返回数据,当布尔值为真时执行,为假时跳出。如

while(dr.Read())

{

Response.write(dr["UserName"]

}

dr.close();

以下是用户登录判断时候合法用户的代码

SQL(SQL Server培训 mySQL培训 )Connection con = DB.WebConnection();//通过类调用连接上数据库

con.Open();//打开连接

SqlCommand com = new SqlCommand();

com.CommandText = "Select * from Users where UserName='" + tbUserName.Text + "'";

com.CommandType = CommandType.Text;

com.Connection = con;

SqlDataReader reader = com.ExecuteReader();

if (reader.Read())

{

int UserID = reader.GetInt32(0);

string Password = reader["UserPassword"].ToString();

string Password0 = tbUserPassword.Text;

if (Password == Password0)

{

Session["uid"] = UserID;

Session["name"] =tbUserName.Text;

Response.Redirect("index.aspx");

}

else

{

Response.Redirect("login.aspx");

}

}

else

{

Response.Redirect("login.aspx");

}

用这种方法不仅能判断用户名是否合法,还可以很方便地获取更多关于该用户的信息,其中,我比较喜欢用的是string Password = reader["UserPassword"].ToString();这种方法,但是这种方法似乎不能获取int类型的字段数据,比如这里的UserId,只能用int UserID = reader.GetInt32(0);这种方法获取它的值。不知道用字段名有没有方法获取到UserId的值。


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值