首页 新闻 搜索 专区 学院

弱弱的问下大家一个ADO.NET更新问题?

0
[已解决问题] 解决于 2009-08-27 10:19

我很久没用ADO.NET操作数据了,现在有个WinForm项目需要用到,知识都忘完了。以下是我写的更新,大家看看缺少点什么吗?我点击更新的时候数据显示更新,但是不更新数据库。

int num = 0;
            for (int i = 0; i < this.dataGridView1.SelectedRows.Count;i++ )
            {
                int id = Convert.ToInt32(this.dataGridView1.SelectedRows[i].Cells[i].Value.ToString());
                //MessageBox.Show(id+"show");
                OleDbConnection conn = Dbconnection.Getcon();
                conn.Open();
                OleDbCommand command = new OleDbCommand("update Users set UserState='1' where UserID=" + id.ToString(), conn);
                num = command.ExecuteNonQuery();
              
                conn.Close();
            }
          
                MessageBox.Show("删除成功");
                dataBind();

问题补充: 跟踪了,我的NUM的值得到的是1,还有command得到的语句是:Update Users set UserState='1' where UserID='10' 或者老师可以给我一个跟新的例子。我在GridView里面是显示跟新了,可是打开数据库的时候字段的值是没有改变的,我用的是Access数据库 谢谢大家了!这个问题我已经解决了,没有用上面这个方法,用了另一个更新方法,发出来给大家分享一下。 OledbHelpDao是封装好了的数据库操作类 //删除 private void button2_Click(object sender, EventArgs e) { DialogResult resu = MessageBox.Show("你确定要删除该人员吗?一旦删除就不能恢复!", "提示", MessageBoxButtons.YesNo); if(resu.CompareTo(DialogResult.No)==0) { return; } for (int i = 0; i < this.dataGridView1.SelectedRows.Count;i++ ) { int id = Convert.ToInt32(this.dataGridView1.SelectedRows[i].Cells[i].Value.ToString()); String sqlStr = "update UsersInfo set UserState=1 where UserID=" + id.ToString(); int num = DBUtility.OledbHelpDao.ExecuteNonQuery(DBUtility.Constance.con, CommandType.Text, sqlStr); if (num == 1) { MessageBox.Show("删除成功!"); dataBind(); } else { MessageBox.Show("删除失败!"); } } }
something的主页 something | 初学一级 | 园豆:5
提问于:2009-08-19 11:06
< >
分享
最佳答案
0

你跟踪一下sql,看看执行没执行Update?

cmd中输入Profiler(sql2008)或Profiler90(SQL2005)

你把这句直接拿到access的查询里执行看看能不能更新

 

Update Users set UserState='1' where UserID='10'
感觉应该是下面这样
Update Users set UserState=1 where UserID=10

看看UserState和UserID是不是数字型

还有你这个写法,Conn不能写在循环里面的。

                int num = 0;
OleDbConnection conn
= Dbconnection.Getcon();
conn.Open();
for (int i = 0; i < this.dataGridView1.SelectedRows.Count;i++ )
{
int id = Convert.ToInt32(this.dataGridView1.SelectedRows[i].Cells[i].Value.ToString());
//MessageBox.Show(id+"show");
OleDbCommand command = new OleDbCommand("update Users set UserState=1 where UserID=" + id.ToString(), conn);
num
= command.ExecuteNonQuery();
}
conn.Close();
MessageBox.Show(
"删除成功");
dataBind();

 

邀月 | 高人七级 |园豆:25358 | 2009-08-19 11:09
其他回答(3)
0

command的语句中UserID=‘10’,从你上面的写的看,不应该加单引号的。

如果Num为1,那说明执行了,你再检查一下数据库吧。

侯垒 | 园豆:3435 (老鸟四级) | 2009-08-19 16:48
0

我在GridView里面是显示跟新了,可是打开数据库的时候字段的值是没有改变的,我用的是Access数据库
--

呃。。。估计是没刷新数据库= =#

DaCHun | 园豆:255 (菜鸟二级) | 2009-08-19 17:35
0

楼上的说的可以看一下

还有一点:OleDbConnection conn = Dbconnection.Getcon();
                conn.Open();
conn.Close();

这个最好不要写在循环里,你循环一次就要重新连接一次数据库太浪费资源和时间了。

Annie | 园豆:396 (菜鸟二级) | 2009-08-20 08:30
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册