【发布时间】:2016-11-16 15:59:24
【问题描述】:
简单的问题:
当我在最初创建第一个数据后第二次调用SqlDataAdapter.Fill(DataGridView.DataSource) 时,它不会更新包含的行。它只是将选择命令返回的所有行添加到我的 DataGridView。
如果我称它为第三、第四(依此类推),它也只会添加返回的行。
我对 .Fill(DataTable) 函数的理解有误吗?如何正确更新已经存在的 DataTable?哪一行代码对此负责?
原来是代码问题;
DataGridView1.AutoGenerateColumns = False
Dim sql = "select * from myTable"
oDtSource = New DataTable
oAdapter = New SqlDataAdapter
oCon = sqlCon("serverName\Instance", "myDataBase") ' Returns a SqlConnection
oCmd = New SqlCommand(sql, oCon)
oCon.Open()
oDtSource.Clear()
oAdapter.MissingSchemaAction = MissingSchemaAction.AddWithKey
oAdapter.SelectCommand = oCmd
oAdapter.Fill(oDtSource)
DataGridView1.DataSource = oDtSource
为了提神,我使用oAdapter.Fill(oDtSource)
PrimaryKey 在数据库中设置
【问题讨论】:
-
请展示您如何设置 DataAdapter(我假设您正在尝试刷新数据,否则只需使用新数据表或清除行)。不知道为什么 DV 除了可能缺少代码 - 这是一个不错的问题。
-
我很确定 Tim Schmelter 让我走上了正确的道路。工作时间现在结束了,所以我明天必须检查一下。再次感谢@Plutonix 带我尝试实际的 .Fill 方法,而不是一遍又一遍地创建新表。
-
代码已在上面发布。
-
我会加载架构并在数据表上定义
PrimaryKey。它可以很好地刷新行,但在添加行时可能会有一个刷新技巧 -
该命令是什么样的,应该在哪一行发布?在第一次调用
oAdapter.Fill(oDtSource)之后,我尝试使用oDtSource.PrimaryKey = New DataColumn() {oDtSource.Columns("myPrimaryKey")},但它似乎对我不起作用。它仍然以添加而不是更新的行结束。
标签: vb.net datagridview sqldataadapter