【问题标题】:Sql Server Ce 3.5 Identity insertSql Server Ce 3.5 身份插入
【发布时间】:2009-03-25 17:36:19
【问题描述】:

Sql Server CE 中的标识列存在问题

使用服务器资源管理器时,在VS2008中,执行如下脚本

SET IDENTITY_INSERT testTable ON; 插入 testTable (id,name) 值 (1,'Something') SET IDENTITY_INSERT testTable ON;

发送后续消息错误 '不支持 Set SQL 构造或语句。' 但随后插入行很好?!?!?!

无论如何,当我尝试通过 C# 做同样的事情时,将该脚本作为命令文本 它没有说错误在“插入关键字”中

我了解,针对 SQL SERVER CE,该命令当时只接受一个批处理命令 所以在这种情况下,我们有三个命令(它可以与完整的 SQLServer 一起使用) 有什么想法吗?

【问题讨论】:

  • 会不会是缺少的“;”在“INSERT”和第二个“SET”之间?

标签: c# sql-server compact-framework identity-insert


【解决方案1】:

如果您使用的是 SqlCe 3.5,那么这应该可以。但是,您需要将其作为两个单独的命令发送。您不能用“;”分隔命令或 SqlCe 中的“GO”。相反,您需要执行以下操作:

            SqlCeConnection connection = new SqlCeConnection(connectionString);
            SqlCeCommand identChangeCommand = connection.CreateCommand();
            identChange.CommandText = "SET IDENTITY_INSERT SomeTable ON";
            SqlCeCommand cmd = connection.CreateCommand();
            cmd.CommandText = "INSERT INTO testTable (Id, column1, column2..) VALUES (10,val1,val2...)";
            try
            {
                connection.Open();
                identChange.ExecuteNonQuery();
                cmd.ExecuteNonQuery();
            }

            catch (SqlCeException ex)
            {
                //log ex
            }
            finally
            {
                connection.Close();
            }

【讨论】:

  • 好的,效果很好。很多!我试图单独使用一个命令,在我的winform中设置insert_identity,这很好,但之后我无法进行插入。但就像你的例子一样,正是我想要的=)。欢呼
【解决方案2】:

试试

SET IDENTITY_INSERT testTable ON; 
Insert into testTable (id,name) values (1,'Something');
SET IDENTITY_INSERT testTable OFF;

SET IDENTITY_INSERT testTable ON
go
Insert into testTable (id,name) values (1,'Something')
go
SET IDENTITY_INSERT testTable OFF
go

【讨论】:

  • GO 是一个只存在于工具中的概念——实际的解析器并不使用它们来区分任何东西。
  • @Jason Short,你错了!执行以下操作:打印“错误!!!”将过程 xyz 创建为 Print '如果没有“GO”,这将无法工作'。通过在 print 'ERROR!!!' 之后添加 GO,它将起作用
  • @KM: SQLCE 不支持存储过程
  • @Brian Wilkins,然后做同样的事情,但是创建一个视图而不是一个过程,你会得到同样的错误
  • 第二个选项在 SQL Server Management Studio 中对我来说效果很好
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-17
相关资源
最近更新 更多