【发布时间】:2016-01-04 13:53:51
【问题描述】:
如何从数据集中的 ID 列中获取最高 ID 号?我正在使用 ADO.NET (C#)。如果我这样做:
dataSet.Tables["Students"].Columns["ID"].AutoIncrement = true;
当我到达一个已经存在的 ID 时,应用程序将抛出异常。从“高数字”开始只是一个丑陋的黑客。那么如何才能正确安全地完成这项工作呢?
我在 GridView 中添加新行并将该数据保存到缓存中,然后从缓存返回到 DataSet,然后使用 DataAdapter 方法“更新”将新数据发送回 SQL Server。
【问题讨论】:
-
我不明白这个问题。什么是“当我到达已经存在的 ID 时会抛出异常”?如果该列是
IDENTITY列,则无需手动插入该值。插入记录时,它将由数据库分配。所以在插入之前你不会知道真实的数字。然后你可以使用SELECT SCOPE_IDENTITY()来获取值。你可以combine the insert with this select to get this value in one statement。 -
对不起。 SQL Server 有一个带有 AutoIncrement 的 ID 主键列。但数据集没有。因此,当我向 DataSet 添加新记录时,我需要提供一个 ID。如果我只是自动增加 ID,它最终会在存在两个 ID 值时破解应用程序。假设我在 DataSet 中有 ID 值为 1、2、3、4、5 等的记录。当我向该 DataSet 添加新记录时,我需要提供新记录和 ID 值为 6,高于最高值数据集中存在的 ID 值。
-
如果是
IDENTITY-column,则无需指定 ID。您只需插入其他值:INSERT INTO Students(col2,col3,..) VALUES (@col2,@col3,...); SELECT SCOPE_IDENTITY();。该 insert.statement 可以使用ExecuteScalar执行,您将获得插入记录的新 ID 值。 msdn.microsoft.com/en-us/library/vstudio/… 它还应该使用新的 ID 值更新DataTable,但我不确定。 -
这是离线模式,断开数据访问。您正在谈论更新底层 SQL 数据库。异常来自 DataSet 而不是 SQL 数据库。
标签: sql linq gridview ado.net dataset