2012-12-13 76 views
1

我無法插入新行到SQL Server CE 3.5表中插入到SQL Server CE由於自動增量列不能與自動增量

我的模式很簡單,只要:

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

而在C#我的INSERT語句

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: An SqlCeParameter with ParameterName 'Foo_ID' is not contained by this SqlCeParameterCollection

回答

3

由於您的列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(); 
1

問題是你有@Foo_ID作爲你的參數查詢,但不要添加這樣的參數cmd.Parameters.Add

+0

它是一個自動增量場 - PRIMARY KEY IDENTITY .. – KMC

+0

如果自動增量領域,你不需要在語句中調用它:'SqlCeCommand cmd = new SqlCeCommand(@「INSERT INTO DataTable VALUES(@FooName,con)) ' –

+0

指定'@ Foo_ID'表示您打算提供一個名爲'Foo_ID'的參數。告訴它,它會抱怨你沒有爲它提供一個值,因此 - 不要說你會包含一個:) INSERT INTO DataTable(FooName)VALUES(@FooName)'' –

-1

嘗試發送-1作爲ID,這樣會強制自動增量設置正確的值。