111,129
社区成员
发帖
与我相关
我的任务
分享OleDbDataAdapter da = new OleDbDataAdapter("select * from a", conn);
da.Fill(ds, "a");
ds.Tables("a").PrimaryKey = new DataColumn[] { ds.Tables("a").Columns("序号") };
dgv.DataSource = ds.Tables("a")
OleDbCommandBuilder builder = new OleDbCommandBuilder(da);ds.Tables("a").Rows.RemoveAt(0)
da.Update(ds.Tables("a"));ds.Tables("a").Rows(0).Delete();
da.Update(ds.Tables("a"));
ds.Tables("a").AcceptChanges();ds.Tables("a").Rows.RemoveAt(0)
da.Update(ds.Tables("a"));
修改成:
dgv.Rows.RemoveAt(0)
da.Update(ds.Tables("a"));
这样可以更新到数据库。这样真奇怪,修改datagridview可以更新到数据库,反而修改datatable不能更新到数据库。
还有我发现一个奇怪的现象:
builder = new OleDbCommandBuilder(da);
ds.Tables("a").Rows.Find(dgv(dgv.DataSource.PrimaryKey(0).ToString, dgv.CurrentRow.Index).Value)(dgv.CurrentCell.ColumnIndex) = dgv.CurrentCell.Value;
da.Update(ds.Tables("a"));
如果读取数据库的语句是"select * from a",上面的代码通过修改datagridview单元格内容,能够更新到数据库;但是如果读取数据库的语句是"select top 500 * from a",则并不能更新到数据库。说明一下:builder = new OleDbCommandBuilder(da)中的da中的选择语句我也是同步更改为对应读取数据库的语句的。所以这很奇怪。
最后还有一个奇怪的问题:
我发现当使用SQL数据库时(用到SqlDataAdapter, SqlCommandBuilder之类的),datatable.Rows.Remove(datarow)的方法反而能够更新到数据库,这个是不是微软在鄙视access吗?