我使用一个数据集中插入数据的转换从旧的数据库。要求维持目前的Order_ID数字。

我已经试过使用:

SET IDENTITY_INSERT orders ON;

这个工作时我在Sql server管理工作室,我能成功

INSERT INTO orders (order_Id, ...) VALUES ( 1, ...);

然而,它不会允许我这样做过的数据集的插入的,我在使用我的转换脚本。这看起来基本上是这样的:

dsOrders.Insert(oldorderId, ...);

我已经运行SQL(SET IDENTITY_INSERT订单)过程中。我知道,我只能做到这一针对一个表格的时间和我。

我不断收到这个例外:

例外时,试图插入一个值到订单表 系统。数据。SqlClient.SqlException:不能插入明确的价值身份列表中的"订单"当IDENTITY_INSERT是设定至关。

任何想法?

更新

AlexS&AlexKuznetsov已经提到,Set Identity_Insert是一个连接水平的设置,但是,当我看SQL在SqlProfiler,我注意到几个命令。

  • 第一- SET IDENTITY_INSERT DEAL ON
  • 第二- exec sp_reset_connection
  • 第三n-我各种各样的sql命令,包括选择&插入的

总是有一个 exec sp_reset_connection 之间的命令,我认为,这是负责损失的价值在Identity_Insert设置。

有没有办法阻止我的数据集的做连接的重置?

有帮助吗?

解决方案

你有选择的混合起来:

SET IDENTITY_INSERT orders ON

将会打开 插入能力的具体的值(指定)为表的身份柱。

SET IDENTITY_INSERT orders OFF

实证明这种行为再次关闭和正常行为(你不能指定值身份列,因为他们是自动生成)是恢复。

Marc

其他提示

你想要做SET IDENTITY_INSERT 让你插入身份列。

这似乎有点落后,但是它的工作方式。

看来你正在做的一切权利:SET IDENTITY_INSERT单上是正确的路上 SQL服务器的一侧.但问题是,你正在使用的数据集。从你的代码已经提供了我可以说,你使用 输入的数据集 -那个产生Visual Studio根据的数据库。

如果是这种情况(最有可能的),然后 这个数据集 包含约束,不会允许设定值为订单id领域,即它的代码,不允许指定明确的价值,而不SQL服务器。你应该去数据集的设计和编辑性质的订单id领域:设置自动增量和只读到错误的。但是,同样的变化能够进行运行时间。这将允许添加一个行与明确的价值,为订单id的数据集,后来保存到SQL服务器表(你将仍然需要SET IDENTITY_INSERT).

还注意到,IDENTITY_INSERT是一个连接级设置,所以你需要确保执行相应的设定完全相同的连接,你将用来保存更改数据库。

我会用探查,以确定是否SET IDENTITY_INSERT订单;是颁发的作为同一连接你的后续插入的,以及的确切SQL正在执行期间的插入。

AlexS是正确的,该问题是Insert_Identity的工作,但它是一个连接水平的设置,所以我需要设置Insert_Identity内的事务。

我用瑞恩*惠特克 TableAdapterHelper 代码

我创造了一个更新命令我的库中,删除跑的Identity_Insert.然后我不得不创建一个新的插入件指令与标识列的规定。然后我跑了这个代码

SqlTransaction transaction = null;

try
{
     using (myTableAdapter myAdapter = new myTableAdapter())
     {   
         transaction = TableAdapterHelper.BeginTransaction(myAdapter);
         myAdapter.SetIdentityInsert();
         myAdapter.Insert(myPK,myColumn1,myColumn2,...);
     }

     transaction.Commit();
 }
 catch(Exception ex)
 {
     transaction.Rollback();
 } 
 finally
 {
     transaction.Dispose();
 }

在情况下,你仍然有的问题"insert_identity",你可以尝试使用 完全插入的发言 如:

插入用户(Id,Name)values(1,'杰夫*')

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top