我很久没用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();
你跟踪一下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();
command的语句中UserID=‘10’,从你上面的写的看,不应该加单引号的。
如果Num为1,那说明执行了,你再检查一下数据库吧。
我在GridView里面是显示跟新了,可是打开数据库的时候字段的值是没有改变的,我用的是Access数据库
--
呃。。。估计是没刷新数据库= =#
楼上的说的可以看一下
还有一点:OleDbConnection conn = Dbconnection.Getcon();
conn.Open();
conn.Close();
这个最好不要写在循环里,你循环一次就要重新连接一次数据库太浪费资源和时间了。