任何人都可以告诉我我在哪里做错了。我正在尝试用c#自己开发一个小网站。我无法显示从datareader获取的记录。
{
SqlConnection cone = new SqlConnection("User id=...;Password=;...");
SqlCommand conecmd = new SqlCommand("select bankbalance from bank where bankpassword='" + txtboxbankpassword.Text + "'", cone);
cone.Open();
SqlDataReader drcone = conecmd.ExecuteReader();
if (drcone.HasRows) // says it has row(s) i.e., Hasrows=true
{
while (drcone.Read()) // here its value is false
{
lblremainingbankbalance.Text = drcone["bankbalance"].ToString();
}
int a;
a = Convert.ToInt32(lblremainingbankbalance.Text);
lblmsg.Text = "Transaction successful.Please wait while we redirect you to mypage and your current " + bankstore + " accountbalance is " + a + "";
Response.AddHeader("REFRESH", "5;URL=Mypage.aspx");
txtboxbankpassword.Text = "";
} else {
lblmsg.Text = "Norecord(s)";
}
}
答案 0 :(得分:0)
尝试在SQL服务器中运行查询并查看它是否显示某些行,因为我没有看到代码中的任何错误也会修改文本框的文本,如下所示
txtboxbankpassword.Text.Trim()
完成从datareader读取行后,也会关闭连接。
答案 1 :(得分:0)
你的情况很奇怪..如果drcone.HasRows
为真drcone.Read()
必须返回true ...最少一次..
您是否正在调试代码并将drcone.Read()
添加到quickwatch或将其放入监视列表中?因为,它会在你的while循环之前运行方法Read()
。下次当你调用Read()
时(在你的while循环中),它将返回false ..
你得到一行,读者将读者与第一行(在whatchlist中)对齐,并在你的while循环中返回false并说“在这一行之后没有剩下的行”。
请参阅此链接以下文档:http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.read.aspx
如果你只有一个单一的,读者“在位置-1”..在drcone之后。回复()(返回true)将位置设置为0(1和最后一行)..下次你调用drcone。 Read()它将返回false ..因为在此之后没有剩下的行(读取器位于0位置)