【问题标题】:Cannot insert to SQL Server CE with autoincrement无法使用自动增量插入到 SQL Server CE
【发布时间】: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”

【问题讨论】:

    标签: c# wpf sql-server-ce


    【解决方案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,这样它将强制自动增量设置正确的值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-10
        • 2013-07-11
        • 1970-01-01
        • 2014-12-05
        • 1970-01-01
        相关资源
        最近更新 更多