摘要:[MSSQL][INSERT INTO] IDENTITY_INSERT
今天在WinForms下練習SqlConnention與SqlCommand物件的操作,
其中在練習INSERT INTO語法時,發生了IDENTITY_INSERT的例外錯誤訊息:
Cannot insert explicit value for identity column in table 'testTable' when IDENTITY_INSERT is set to OFF.
問題發生在哪呢? 先來看一下Code:
[C#]
using (SqlConnection sqlconnention = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|Database1.mdf;Integrated Security=True;User Instance=True"))
{
sqlconnention.Open();
SqlCommand sqlcmd = new SqlCommand("INSERT INTO testTable (id) VALUES (@id)", sqlconnention);
sqlcmd.Parameters.Add("@id", SqlDbType.Int).Value = 4;
sqlcmd.ExecuteNonQuery();
}
程式的例外錯誤中斷點在於ExecuteNonQuery()方法,其中問題在於資料庫的testTable資料表(Data Table)設了主索引鍵(Primary Key),且同時將主索引鍵的資料行屬性→識別規格→(為識別)是;且有識別值增量,這樣設定後,在INSERT INTO語句中,不能含有主索引鍵的資料行名稱,像上面的範例將id嘗試新增到資料表裡面,可是id是主索引鍵,且有設定識別規格裡面的設定,所以才發生了IDENTITY_INSERT例外錯誤。
如果你還使用Linq的話,請參考 http://www.dotblogs.com.tw/nobel12/archive/2010/09/14/17721.aspx