看看这段代码

landry1234 2009-05-02 05:51:04
连接数据库代码省略
string selstr = "select Urnum from userinfo where Uname='"+textBox1.Text+"'";
SqlCommand cmd = new SqlCommand(selstr, connect);
SqlDataReader dr = cmd.ExecuteReader();
if (dr.Read())
{

string []rid=new string[dr.FieldCount];
int i,n;
n=dr.FieldCount;
for (i = 0; i < n; i++)
{
rid[i]=dr[i].ToString();
}
dr.Close();
string delstr = "delete from userinfo where Uname='" + textBox1.Text + "'";
cmd = new SqlCommand(delstr, connect);
cmd.ExecuteNonQuery();
string updatestr;
for (i = 0; i < n;i++ )
{
updatestr = "update rinfo set Rin='0' where Rid='"+rid[i]+"'";
cmd = new SqlCommand(updatestr, connect);
cmd.ExecuteNonQuery();
}
运行时0怎么也加不进数据库的Rin,但是把where Rid='"+rid[i]+"'去掉就可以加进去了,难道是dr[i]中没有值?
希望大家帮忙解决
...全文
111 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
DavidWu108 2009-05-02
  • 打赏
  • 举报
回复
你根本没有去查FieldCount是什么意思,它表示已获取得当前行中的列数。
你的查询只有一列所有FieldCount永远为1 !!!
sqlDatareader在读完数据之前是不知道查询有多少行的,所以建议改用别的写法来完成数据的存储。


List<string> rid = new List<string>();
while (dr.Read())
{
rid.Add(dr["Urnum "] as string);
}
dr.Close();

最后几行代码也改一下:

foreach (string id in rid)
{
updatestr = "update rinfo set Rin='0' where Rid='"+id+"'"; //rid[i]-->id

cmd = new SqlCommand(updatestr, connect);
cmd.ExecuteNonQuery();
}
soaringbird 2009-05-02
  • 打赏
  • 举报
回复

if (dr.Read()) //这一行,如果你不是只想取第一行数据,那就用while而不是if
{

string []rid=new string[dr.FieldCount];
int i,n;
n=dr.FieldCount;
for (i = 0; i < n; i++) //只取了一列,就不用循环了
{
rid[i]=dr[i].ToString();
}
dr.Close();
string delstr = "delete from userinfo where Uname='" + textBox1.Text + "'";
cmd = new SqlCommand(delstr, connect);
cmd.ExecuteNonQuery();
string updatestr;
for (i = 0; i < n;i++ ) //看下一行你是想对行循环?但是按你的代码是对列循环。如果上面用while,去掉这行
{
updatestr = "update rinfo set Rin='0' where Rid='"+rid[i]+"'";
cmd = new SqlCommand(updatestr, connect);
cmd.ExecuteNonQuery();
}
我姓区不姓区 2009-05-02
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 landry1234 的回复:]
我测试过了为什么dr.FieldCount每次都等于一,我表里有好多条数据都满足条件的
[/Quote]
那当然啊,你就select了一个Urnum,dr.FieldCount当然是1啦
Mr_Long 2009-05-02
  • 打赏
  • 举报
回复

dr后面的括号里接列名的。
你这样只能获取第一行的值。
landry1234 2009-05-02
  • 打赏
  • 举报
回复
我测试过了为什么dr.FieldCount每次都等于一,我表里有好多条数据都满足条件的
我姓区不姓区 2009-05-02
  • 打赏
  • 举报
回复
单看代码看不出什么逻辑错误,你最好加个断点调试一下
landry1234 2009-05-02
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 xx_mm 的回复:]
这些写法很有问题~
你的 dr.Read 只要dr有数据 这个式子永真了 那么if一定执行
另外int i,n; 已经定义成了局部变量两个循环公用同一个,下面for又定义局部变量 难道不会出问题吗?

[/Quote]
我把限制条件where Rid='"+rid[i]+"'去掉就可以加进去,说明不是i,n的问题了,问题肯定出在dr[i]没有加到rid[i]
soaringbird 2009-05-02
  • 打赏
  • 举报
回复
debug查看一下updatestr的内容,在sql 查询分析器里执行试试
蔡袅 2009-05-02
  • 打赏
  • 举报
回复
这些写法很有问题~
你的 dr.Read 只要dr有数据 这个式子永真了 那么if一定执行
另外int i,n; 已经定义成了局部变量两个循环公用同一个,下面for又定义局部变量 难道不会出问题吗?

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧