【问题标题】:Cannot insert explicit value for identity column in table 'tbl Fingerprint' when IDENTITY_INSERT is set to OFF [duplicate]当 IDENTITY_INSERT 设置为 OFF 时,无法在表“tbl Fingerprint”中插入标识列的显式值 [重复]
【发布时间】:2014-02-24 05:41:36
【问题描述】:

我正在尝试将数据插入到有四列的指纹表中 - ID(主键) - StudentID(外键)链接到学生表 - 描述 - 模板

但以下错误不断出现。我无法关闭 ID 的 IDENTITY,因为我希望它自动递增。我还有一个学生表来存储信息。我想要实现的是在输入学生详细信息后,我想将之前生成的学生ID复制到指纹表 - StudentID 列。我为此提供的代码如下所示。

private void btnSave_Click(object sender, EventArgs e)
        {
            fgrTemplate template = new fgrTemplate();
            template.StudentID = std.StudentID;
            template.Description = fngDes.Text;
            template.Template = m_StoredTemplate;
            if (upload.InsertTemplate(template))
            {
                MessageBox.Show("Student Successfully Added!");
            }
            else
            {
                MessageBox.Show("Student Not Successfully Added!");
            }

using (SqlCommand com = new SqlCommand("INSERT INTO tblFingerprint (StudentID, Description, Template) values ('" + template.StudentID + "' ,'" + template.Description + "' ,@Template)", cn))

这就是我的网络服务中的内容。但是它给了我错误

【问题讨论】:

  • 不要将 ID 列添加为插入的一部分。 Insert Table (strcolumn1, strcolumn2) values (1,2) Table(id int, strcolumn1 varchar(1), strcolumn2 varchar(2))
  • 您在 INSERT 语句中传递了 ID 值,ID 作为身份类型应该获得一个自动递增编号。请参阅linked question 并在问题中发布您的相关代码。

标签: c# sql sql-server web-services sql-server-2008


【解决方案1】:

在为具有IDENTITY 列的表发出INSERT 语句时,不要在字段和值列表中包含标识列。例如,以下语句将失败:

INSERT INTO tbl (ID, StudentID) VALUES (1, 1)

但是这个语句会成功:

INSERT INTO tbl (StudentID) VALUES (1)

并将下一个可用的标识值插入ID 列。

现在,如果您确实想要插入实际身份,请执行以下操作:

SET IDENTITY_INSERT tbl ON
INSERT INTO tbl (ID, StudentID) VALUES (1, 1)
SET IDENTITY_INSERT tbl OFF

【讨论】:

  • @user3144368,请使用代码编辑您的问题并删除此评论。
猜你喜欢
  • 1970-01-01
  • 2016-05-13
  • 1970-01-01
  • 2014-02-21
  • 2016-08-18
  • 2019-03-10
  • 2010-11-22
相关资源
最近更新 更多