无法使用自动增量插入到 SQL Server CE

Posted

技术标签:

【中文标题】无法使用自动增量插入到 SQL Server CE【英文标题】:Cannot insert to SQL Server CE with autoincrement 【发布时间】:2012-12-13 07:57:14 【问题描述】:

由于自动增量列,我无法向 SQL Server CE 3.5 表插入新行

我的架构很简单:

@"CREATE TABLE DataTable ("Foo_ID int PRIMARY KEY IDENTITY, " +
                          "FooName NVARCHAR(200) NOT NULL)

还有我在 C# 中的插入语句

SqlCeCommand cmd = new SqlCeCommand(@"INSERT INTO DataTable VALUES(@Foo_ID, @FooName)", con))
conn.Open();
cmd.Parameters.Add(new SqlCeParameter("FooName", "test123"));
cmd.ExecuteNonQuery();

然后我得到错误:

System.IndexOutOfRangeException:带有 ParameterName 的 SqlCeParameter 此 SqlCeParameterCollection 不包含“Foo_ID”

【问题讨论】:

【参考方案1】:

由于您的列 FOO_ID 是一个自动递增的 IDENTITY 列,您必须在您的 INSERT 语句中省略它。因此,您需要明确指定要插入值的列列表 - 试试这个:

SqlCeCommand cmd = new SqlCeCommand(@"INSERT INTO DataTable(FooName) VALUES(@FooName)", con))
conn.Open();
cmd.Parameters.Add(new SqlCeParameter("FooName", "test123"));
cmd.ExecuteNonQuery();

【讨论】:

【参考方案2】:

问题是您的参数中有@Foo_ID 作为查询,但不要使用cmd.Parameters.Add 添加这样的参数。

【讨论】:

如果是自增字段,则不需要在语句中调用:SqlCeCommand cmd = new SqlCeCommand(@"INSERT INTO DataTable VALUES(@FooName, con)) 指定@Foo_ID 意味着您打算提供一个名为Foo_ID 的参数。如果你告诉它,它会抱怨你没有为它提供一个值。因此 - 不要说你会包括一个:) INSERT INTO DataTable (FooName) VALUES (@FooName)【参考方案3】:

尝试发送 -1 作为 ID,这样它将强制自动增量设置正确的值。

【讨论】:

以上是关于无法使用自动增量插入到 SQL Server CE的主要内容,如果未能解决你的问题,请参考以下文章

无法通过 SQL Server Express Management Studio 设置自动增量?

向 SQL server Compact 数据库插入自动增量密钥

GORM 和 SQL Server:自动增量不起作用

SQL Server 2005:在两个主键之一上设置自动增量时出错

插入本地 Sql Server CE 不插入

插入到 SQL Server CE 数据库