【发布时间】:2019-04-07 07:49:15
【问题描述】:
我有一个 Datagridview,其中填充了来自 SQL Server 的一些数据。这完全没有问题。
每次我在表中插入或更新记录时,我都想对表中名为CarID 的IDENTITY 列进行RESEED,但是IDS 的顺序似乎不好,因为有时会删除记录。
在我的代码中,我使用“SQLCOMMANDBUILDER”来执行插入、更新或删除 操作。
我尝试了下面的代码,但我抛出了一个异常错误,上面写着“找不到表 0”。
我应该在哪里修复?
//THESE ARE CODE TO RESEED AN IDENTITY COLUMN
Sub ResetIDColumn()
Try
Dim querystring As String = "declare @max int " &
"Select @max=max([CarID]) FROM [dbo].[Cars]" &
"if @max IS NULL SET @max = 0 " &
"DBCC CHECKIDENT ('[Cars]', RESEED,@max)"
ds = New DataSet
da = New SqlDataAdapter(querystring, con)
cmdbuilder = New SqlCommandBuilder(da)
da.Fill(ds)
DgvCarList.DataSource = ds.Tables(0)
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub
//CODE TO PUPOLATE DATAGRIDVIEW
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs)
Handles MyBase.Load
Try
Dim querystring As String = "SELECT * FROM [dbo].[Cars]"
ds = New DataSet
da = New SqlDataAdapter(querystring, con)
cmdbuilder = New SqlCommandBuilder(da)
da.Fill(ds)
DgvCarList.DataSource = ds.Tables(0)
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub
//CODE TO INSERT OR UPDATE DATA
Private Sub btnUpdate_Click(sender As System.Object, e As System.EventArgs) Handles btnUpdate.Click
ResetIDColumn()
Try
da.Update(ds.Tables(0))
MessageBox.Show("Update was successful!", "Data")
Loaddata()
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub
//CODE TO LOAD DATA
Sub Loaddata()
Dim querystring As String = "SELECT * FROM [dbo].[Cars]"
ds = New DataSet
da = New SqlDataAdapter(querystring, con)
cmdbuilder = New SqlCommandBuilder(da)
da.Fill(ds)
DgvCarList.DataSource = ds.Tables(0)
DgvCarList.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill
End Sub
【问题讨论】:
-
一句话:不要这样做!你只是问长期麻烦。一旦使用了身份 - 它就消失了 - 不要尝试“回收”它 - 这不是它的工作方式,只会给你带来悲伤和麻烦。保持身份价值不变,然后继续解决实际问题......
-
@marc_s 这实际上是 3 个字(嗯,现在更多了......),但这仍然是有人可以给 OP 的最佳建议。
-
@ZoharPeled:好吧——这只是在挑剔:D
-
@marc_s 当然,毕竟我们是程序员……如果我们不挑剔,谁会呢?
-
@Mligo 标识列的意义在于它是自动生成的。你不应该弄乱它的价值观,也不应该关心它们是什么。如果列的值具有业务意义,则该列不应是标识列。
标签: datagridview ado.net vb.net-2010 sqlcommandbuilder