有人知道这个错误是什么 (只有在使用列列表且IDENTITY_INSERT为ON时,才能指定表'HD_AANVRAAG_FASE'中标识列的显式值。
描述:执行当前Web请求期间发生了未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。
异常详细信息:System.Data.SqlClient.SqlException:只有在使用列列表且IDENTITY_INSERT为ON时,才能指定表'HD_AANVRAAG_FASE'中标识列的显式值。)表示? 任何帮助表示赞赏。
private void Insert2()
{
SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["HELPDESK_OUTLOOKConnectionString3"].ToString());
conn.Open();
SqlCommand dCmd2 = new SqlCommand(
"INSERT INTO HD_AANVRAAG_FASE VALUES (@fase_id, @aanvraag_id, @status_id, "
+ "@werknemer_id, @fase_datum) SET IDENTITY_INSERT HD_AANVRAAG_FASE OFF ",
conn);
dCmd2.Parameters.AddWithValue("@fase_id", 1);
dCmd2.Parameters.AddWithValue("@aanvraag_id", 2622);
dCmd2.Parameters.AddWithValue("@status_id", 15);
dCmd2.Parameters.AddWithValue("@werknemer_id", 165);
dCmd2.Parameters.AddWithValue("@fase_datum", "12-12-2001");
dCmd2.ExecuteNonQuery();
conn.Close();
}
答案 0 :(得分:3)
由于您没有明确指定列,我认为@fase_id
正在传递到IDENTITY
列,,因为错误表示除非您不能这样做你通过IDENTITY_INSERT
强迫它。
通常,你让DB生成这个;指定INSERT
和 省略 标识列中的列(并且不要尝试分配值)。 INSERT
您的新ID可用SCOPE_IDENTITY()
后直接显示。
答案 1 :(得分:3)
您的代码包含
最后 SET IDENTITY_INSERT HD_AANVRAAG_FASE OFF
但不是相应的
开始时 SET IDENTITY_INSERT HD_AANVRAAG_FASE ON
为什么要以任何方式明确插入这些内容?这是同步任务吗?
答案 2 :(得分:1)
你错过了
SET IDENTITY_INSERT HD_AANVRAAG_FASE ON
在运行插入之前。这是错误的确切原因。
也就是说,显式插入标识值很少 - 例如,仅在将数据从一个表复制到另一个表或使用显式ID初始化新表时使用。通常,您只想省略INSERT中的标识值,这也可以避免错误。