通过向字段ID添加1来模拟添加新记录

时间:2011-12-29 16:49:50

标签: .net sql vb.net

如何通过SQL select从表中检索记录总数,将其存储在变量&反过来,在文本框中添加'1'来模拟添加新记录?

我有以下内容:

myCmd.CommandText = "SELECT COUNT (product_category_id) FROM ProductCategory"
            Try
            myConn.Open()
            dtrReader = myCmd.ExecuteReader()

            If dtrReader.HasRows Then
                'search DB for total records
                Dim a As Integer = ???
                lblProductID.Text = "Entry Number " + ((a + 1).ToString)
            End If
        Catch
        End Try

2 个答案:

答案 0 :(得分:0)

这取决于你想要达到的目标。关于这方面的一些进一步信息将是好的。对我来说,似乎是,您正在尝试获取下一个自动递增的主键值或瞬态(尚未插入)记录的行位置。如果这样做,则需要考虑并发性。由于(当然这取决于你的应用程序)其他人可以在不同的会话中执行相同的任务,显示给该用户的条目号可能被已完成涉及同一表的任务的另一个用户“占用”。

所以我首先要问自己:为什么我需要显示这个值?此值是用户可能为进一步任务记下的自然标识符吗?如果是这样,我建议仅在插入记录(物理上在DB中)后才显示记录的标识符。

答案 1 :(得分:0)

这是不确定的,真实的。 如果它是auto inc并且您可以保证排他性,即没有人可以插入/删除另一条记录,而您要显示的ID是相关的那么

然后选择count(Product_category_id)仅在没有删除任何记录时才有效。 选择Max(product_category_id)仅在最后一个未删除时才有效。

给定一个新创建的表,其中标识为1,增量为1

1st insert will create an id 1
2nd insert will create an id 2
Next will be 3
Delete id 1 now Max is still 2 and OK but count is 1, so will be wrong
Or
Delete id 2 now Max is 1 and Count is 1 so now max and count are wrong...

Delete both and it's still wrong. Next id to use is independent of the existing data....

然后你的身份是你的身份和增量是1和1是默认值,不保证。

如果你告诉我们使用SQL Server,MySQL的DBMS和版本,可能会有一种“更好”的方式?等

然而,整个概念是完全有缺陷的,自动公司的价值永远不应该向用户展示,即使是间接地这样。

插入后我甚至都不显示它。它是数据库中的内部标识符,不公开它。

你为什么要这样做?有一种更好的方法来实现你所需要的,你必须给我们一些线索。