请教C#问题,谢谢!

Brunos 2008-11-21 10:17:11
请问各位:有一段代码如下,结果是遍历了所有符合查询条件的数据(3000余条),但是仅仅修改了第一条数据,也就是说把第一条查询出的数据更新了3000+遍,而换另一种写法则没有问题,获得了想要的结果。请问是为什么?
P.S.两段代码均执行成功且未报异常,而且不存在连接数据库以及其它操作的问题,意即增、删、改、查本身并无错误,错误只是我写的代码而已。我用的是VS2005+MySql5


private void button1_Click(object sender, EventArgs e)
{
DataReader reader = null;
string sql = "select userNo from sys_user";
string sql2 = "update sys_user set uSign1='{1}',uSign2='{2}' where userNo='{0}'";
try
{
int count = 0;
bool flag = false;
reader = dbo.ExecuteReader(sql); // dbo为操作数据库底层类对象。
while (reader.Read())
{
string userNo = reader["userNo"].ToString();
sql2 = string.Format(sql2, userNo + "1.jpg", userNo + "2.jpg", userNo); // 这里的sql2每次循环都是一样的,未发生改变。
flag = dbo.ExecuteNonQuery(CommandType.Text, sql);
if (flag)
{
count++;
}
}
MessageBox.Show("Done:" + count.ToString());
}
catch (Exception ex)
{
……
}
finally
{
……
}
}


另一种写法可以:


……
string userNo="";
while (reader.Read())
{
userNo = reader["userNo"].ToString();
sql = "update sys_user set uSign1='" + userNo + "1.jpg" + "' where UserNo='" + userNo + "'"; // 换成这样就可以。
flag = dbo.ExecuteNonQuery(CommandType.Text, sql);
if (flag)
{
count++;
}
}

……
...全文
119 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
mawering 2008-11-21
  • 打赏
  • 举报
回复
你换成这样试试

private void button1_Click(object sender, EventArgs e)
{
DataReader reader = null;
string sql = "select userNo from sys_user";
string sql2 = "update sys_user set uSign1='{0}',uSign2='{1}' where userNo='{2}'";//改了0,1,2的顺序
try
{
int count = 0;
bool flag = false;
reader = dbo.ExecuteReader(sql); // dbo为操作数据库底层类对象。
while (reader.Read())
{
string userNo = reader["userNo"].ToString();
sql2 = string.Format(sql2, userNo + "1.jpg", userNo + "2.jpg", userNo); // 这里的sql2每次循环都是一样的,未发生改变。
flag = dbo.ExecuteNonQuery(CommandType.Text, sql);
if (flag)
{
count++;
}
}
MessageBox.Show("Done:" + count.ToString());
}
catch (Exception ex)
{
……
}
finally
{
……
}
}

v41dugu 2008-11-21
  • 打赏
  • 举报
回复
写法而已。。
Brunos 2008-11-21
  • 打赏
  • 举报
回复
呵呵,感谢各位,我已经知道问题所在了
之所以用sql2=string.Format(...);不行是因为sql2本身在循环中已发生改变,{0},{1}等已被填充。
一游 2008-11-21
  • 打赏
  • 举报
回复
看不太明白你的意思

麻烦说的再详细点!
Brunos 2008-11-21
  • 打赏
  • 举报
回复
3楼是指我0、1、2的顺序错了吗?我换过的,没用,还是那个问题——另:我英语确实不好……所以不麻烦的话,还请使用中文,谢谢
Brunos 2008-11-21
  • 打赏
  • 举报
回复
呃……4楼的朋友,我是粘的时候写错了,那个sql其实就是sql2,

5、6楼的两位朋友:这个也是粘错了=。=,不好意思,我设断点看了,SQL语句没有问题的,只是写帖子的时候我粘错了……

先谢谢各位~!
Brunos 2008-11-21
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 gomoku 的回复:]
You are using the changed string as the format-string which is wrong.
A format string has placeholders like {0} {1} ...
[/Quote]


不好意思,我英语不好……
bloodish 2008-11-21
  • 打赏
  • 举报
回复
sql2 = string.Format(sql2, userNo + "1.jpg", userNo + "2.jpg", userNo);
改为
sql2 = string.Format(sql2, userNo, userNo + "1.jpg", userNo + "2.jpg");
bloodish 2008-11-21
  • 打赏
  • 举报
回复
string sql2 = "update sys_user set uSign1='{1}',uSign2='{2}' where userNo='{0}'";sql2 = string.Format(sql2, userNo + "1.jpg", userNo + "2.jpg", userNo);

format的参数次序不对!
长沙三毛 2008-11-21
  • 打赏
  • 举报
回复
没有地方做sql2吧,或者没有Command完成sql2。上面的代码只Command了sql1
gomoku 2008-11-21
  • 打赏
  • 举报
回复

sql2 = string.Format(sql2, userNo + "1.jpg", userNo + "2.jpg", userNo); // 这里的sql2每次循环都是一样的,未发生改变。


You are using the changed string as the format-string which is wrong.
A format string has placeholders like {0} {1} ...
Brunos 2008-11-21
  • 打赏
  • 举报
回复
那个操作数据库的底层类的写法前后不一致(传参问题)是我刚刚发帖子的时候改的,本身没有问题。

111,098

社区成员

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

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

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