无法使用自动增量插入到 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 数据库插入自动增量密钥