【发布时间】:2011-07-08 03:01:37
【问题描述】:
有人知道这个错误是什么吗 (只有在使用列列表且 IDENTITY_INSERT 为 ON 时,才能为表 'HD_AAANVRAAG_FASE' 中的标识列指定显式值。
说明:在执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。
异常详细信息:System.Data.SqlClient.SqlException:表“HD_AANVRAAG_FASE”中标识列的显式值只能在使用列列表并且 IDENTITY_INSERT 为 ON 时指定。)是什么意思? 任何帮助表示赞赏。
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();
}
【问题讨论】:
-
HD_AAVRAAG 表的主键是什么? aanvraag_id?它是一个身份列吗?
-
不,HD_AAANVRAAG_FASE的主键是fase_id。我怎么知道它是否是一个标识列,那是什么?
-
如果你有一个标识列,那么你不应该在应用程序中打开和关闭 identity_insert!这是一个自动生成的数字是有原因的。让数据库正常工作或将身份从表中删除并创建自己的 ID(通常是个坏主意,因为如果您犯了错误,可能会严重破坏数据完整性)。暂时关闭身份的能力应该只用于偶尔的数据迁移,通常不通过应用程序完成。
-
Tassisto,如果您不了解您的数据库表结构(身份是其中的一部分),那么您就没有业务编写代码来插入记录,因为您对数据的完整性有积极的危险。
-
我问了我的 sql server 专家(因为他是制作数据库的人)这个问题是什么,他告诉我不允许我将 fase_id 作为参数。因为 fase_id 是自动生成的。那是我做错了!!!!