【问题标题】:Reset primary key重置主键
【发布时间】:2009-04-18 19:28:05
【问题描述】:

我试图在网上找到答案,但显然无法完成(我的意思是在应用程序级别,而不是数据库)。我需要完全清除我的数据集并同时重置主键。有什么想法吗?

另外,我可以使用的一种技巧是重新初始化数据集,但这似乎也不可能,因为数据集在应用程序中的不同类之间共享(我在 Program.cs 中创建共享数据集)。

谢谢

法鲁克

更新:

好的,我试过了:

MyDataSet sharedDS = new MyDataSet();

。 . .

CleanDS()

{

    MyDataSet referenceDS = new MyDataSet(); 
    sharedDS.Table1.Reset(); 
    sharedDS.Merge(referenceDS); 

}

我的原始问题已解决,但现在我得到一个 System.ArgumentException for Column1 does not 属于 Table1,我可以在其中看到 DataSet Viewer 中的列以及填充的行。另请注意,我可以手动重新创建整个数据集,但我仍然得到同样的错误。有什么想法吗?

【问题讨论】:

  • 我不明白你在做什么。什么意思是“清除我的数据集”和“重置主键”。您是在谈论 ADO.NET 吗?您需要解决的实际问题是什么?
  • 假设我在数据表中有 10 条记录(主键从 1 到 10),我执行 datatable.clear() 将删除所有 10 条记录。但是,当我在其中插入一条新记录时,我希望将主键重置为再次从 1 开始...使用 .Clear() 它将从 11 开始。问题是我如何才能获得与截断表相同的结果(在 sql 中) 或 DBCC CHECKIDENT (table, reseed, 0) 在 C# 代码中用于数据集表。

标签: c# dataset primary-key


【解决方案1】:

我尝试了 autoincrementseed 和 autoincrementstep,它终于可以工作了。供其他人参考:

sharedDS.Clear();
sharedDS.Table1.Columns[0].AutoIncrementStep = -1;
sharedDS.Table1.Columns[0].AutoIncrementSeed = -1;
sharedDS.Table1.Columns[0].AutoIncrementStep = 1;
sharedDS.Table1.Columns[0].AutoIncrementSeed = 1;

请参阅此线程中的推理: http://www.eggheadcafe.com/community/aspnet/10/25407/autoincrementseed.aspx

和: http://msdn.microsoft.com/en-us/library/system.data.datacolumn.autoincrementseed(VS.85).aspx

感谢大家的帮助!

【讨论】:

    【解决方案2】:

    DataSet.Clear() 方法是否符合您的要求?

    编辑

    因为您说要重置主键,所以您必须在 DataSet 保存的 DataTables 上谈论。您是否尝试过调用 DataSet.Tables["MyTable"].Reset(),它应该将表重置为原始状态,而不是整个 DataSet?

    编辑 2

    如果这是一个自增列,您是否尝试过将 DataColumn 的 AutoIncrementSeed 属性重置为 0?

    【讨论】:

    • clear 只删除所有数据,如果我在这之后插入一条新记录,主键将从:最后一条记录键 + 1
    • 是的,我尝试了 datatable.reset() 方法,但它删除了所有列和外键约束。
    • 这听起来很合理,但不幸的是这不起作用。我想我可以通过另一种方式解决它,在经过一些测试后将其作为答案发布......
    • 好的,我试过这个:MyDataSet sharedDS = new MyDataSet(); . . . CleanDS() { MyDataSet referenceDS = new MyDataSet(); sharedDS.Table1.Reset(); sharedDS.Merge(referenceDS);我原来的问题已解决,但现在我得到一个 System.ArgumentException for Column1 does not 属于 Table1 在那里我可以看到 DataSet Viewer 中的列以及填充的行。另请注意,我可以手动重新创建整个数据集,但我仍然得到同样的错误。有什么想法吗?
    • 对不起,这里有格式:MyDataSet sharedDS = new MyDataSet(); . . . CleanDS() { MyDataSet referenceDS = new MyDataSet(); sharedDS.Table1.Reset(); sharedDS.Merge(referenceDS); }
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-08
    • 2016-03-01
    • 1970-01-01
    • 2011-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多