【问题标题】:Cannot insert explicit value for identity column in table 'Student' when IDENTITY_INSERT is set to OFF [duplicate]当 IDENTITY_INSERT 设置为 OFF 时,无法在表“Student”中插入标识列的显式值 [重复]
【发布时间】:2013-03-19 17:54:16
【问题描述】:

将值插入数据库时​​出现此错误。我已经在 SQL Sever Management Studio 中将身份规范属性设置为 ON,但我仍然面临这个错误。我试过了 这种方式也是SET IDENTITY_INSERT Student ON,在我的SQL命令中添加这一行但它没有运行。

Default.aspx.cs:

protected void btnsubmit_Click1(object sender, EventArgs e)
{
    SqlConnection con = new SqlConnection(@"Data Source=INAFFFP1IT004W\MYSQL;Initial Catalog=test;User ID=sa;Password=test@1234;");
    con.Open();

    string SId = tbid.Text;
    string FirstName = tbfirstname.Text;
    string LastName = tblastname.Text;
    string StartDate = tbstart.Text;
    string EndDate = tbend.Text;

    using (SqlCommand cmd = con.CreateCommand())
    {
     cmd.CommandText = "insert into Student(SId,FirstName,LastName,StartDate,EndDate) values('" + SId + "','" + FirstName + "','" + LastName + "','" + StartDate + "','" + EndDate + "')";
        cmd.Parameters.AddWithValue("@SId", tbid.Text);
        cmd.Parameters.AddWithValue("@FirstName", tbfirstname.Text);
        cmd.Parameters.AddWithValue("@LastName", tblastname.Text);
        cmd.Parameters.AddWithValue("@StartDate", tbstart.Text);
        cmd.Parameters.AddWithValue("@EndDate", tbend.Text);
        cmd.ExecuteNonQuery();
    }
    con.Close();
    tbid.Text = "";
    tbfirstname.Text = "";
    tblastname.Text = "";
    tbstart.Text = "";
    tbend.Text = "";
    tbid.Focus();
}

 **Default.aspx**:

 <head runat="server">

<script type="text/javascript">
  window.onload = function () {
    new JsDatePick({
        useMode: 2,
        target: "tbstart",
        dateFormat: "%M/%d/%Y"
    });
    new JsDatePick({
        useMode: 2,
        target: "tbend",
        dateFormat: "%M/%d/%Y"
    });
 };
</script>
<title></title>

<style type="text/css">
    .style1
    {
        width: 64px;
    }
</style>

</head>
<body>
<form id="form1" runat="server">
<div>

</div>
<table cellpadding="2" cellspacing="5">
    <tr>
        <td>
            <asp:Label ID="lblId" runat="server" Text="SId"></asp:Label>
        </td>
        <td>
            <asp:TextBox ID="tbid" runat="server"></asp:TextBox>
        </td>
        <td class="style1">
            &nbsp;</td>
    </tr>
    <tr>
        <td>
            <asp:Label ID="lblname" runat="server" Text="FirstName"></asp:Label>
        </td>
        <td>
            <asp:TextBox ID="tbfirstname" runat="server"></asp:TextBox>
        </td>
        <td class="style1">
            &nbsp;</td>
    </tr>
    <tr>
        <td>
            <asp:Label ID="lbllastname" runat="server" Text="LastName"></asp:Label>
        </td>
        <td>
            <asp:TextBox ID="tblastname" runat="server"></asp:TextBox>
        </td>
        <td class="style1">
            &nbsp;</td>
    </tr>
    <tr>
        <td>
            <asp:Label ID="lblstart" runat="server" Text="StartDate"></asp:Label>
        </td>
        <td>
            <asp:TextBox ID="tbstart" runat="server"></asp:TextBox>
        </td>
        <td class="style1">
            &nbsp;</td>
    </tr>
    <tr>
        <td>
            <asp:Label ID="lblend" runat="server" Text="EndDate"></asp:Label>
        </td>
        <td>
            <asp:TextBox ID="tbend" runat="server"></asp:TextBox>
        </td>
        <td class="style1">
            &nbsp;</td>
    </tr>
    <tr>
        <td>
            <asp:Button ID="btnupdate" runat="server" onclick="btnupdate_Click" 
                Text="Update" Width="63px" />
        </td>
        <td>
            <asp:Button ID="btnsubmit" runat="server" Text="Submit" 
                onclick="btnsubmit_Click1" Width="102px" />
        </td>
        <td class="style1">
     <asp:Button ID="btnsearch" runat="server" onclick="Button1_Click" Text="Search" />
        </td>
    </tr>
</table>
<br />

</form>
</body>

【问题讨论】:

  • 有点跑题了,你的SqlCommand 有一个using 语句,我也会为你的SqlConnection 使用一个语句,所以它会在你完成后处理并关闭连接:)跨度>

标签: c# asp.net sql sql-server


【解决方案1】:

SQL 命令

SET IDENTITY_INSERT <table> ON

有一个会话范围。您需要在 C# 代码中将其包含在发送到数据库的查询中。

请注意,您只能有一个带有 identity_insert 的表。 MSDN:

在任何时候,一个会话中只有一个表可以有 IDENTITY_INSERT 属性设置为 ON。如果表已经将此属性设置为 ON, 并为另一个表发出 SET IDENTITY_INSERT ON 语句, Microsoft® SQL Server™ 返回一条错误消息,指出 SET IDENTITY_INSERT 已经为 ON 并报告它设置为 ON 的表。

【讨论】:

    【解决方案2】:

    您可以尝试执行此命令文本。

     cmd.CommandText = "SET IDENTITY_INSERT Student ON;" + 
                       "insert into Student(SId,FirstName,LastName,StartDate,EndDate) " + 
                        "values(@id, @firstname, @lastname, @startdate, @enddate);" + 
                        "SET IDENTITY_INSERT Student OFF;" ;
     cmd.Parameters.AddWithValue("@id", SId);
     cmd.Parameters.AddWithValue("@firstname", FirstName);
     cmd.Parameters.AddWithValue("@lastname", LastName);
     cmd.Parameters.AddWithValue("@startdate", StartDate);
     cmd.Parameters.AddWithValue("@enddate", endDate);
    

    还请注意,a 参数应使用其前缀“@”插入命令文本中,而不是连接字符串。

    【讨论】:

    • 感谢史蒂夫。这些解决方案对我有帮助。
    • 非常感谢史蒂夫。你的解决方案对我很有帮助。 :)
    【解决方案3】:

    您需要在您的程序或 SQL Server Management Studio 中添加以下代码。有关更多信息,请查看msdn website here

    设置 IDENTITY_INSERT 学生开启

    INSERT INTO Student ON (ID, Name) VALUES (31, 'sss')

    【讨论】:

      猜你喜欢
      • 2016-05-13
      • 2014-02-21
      • 2016-08-18
      • 2019-03-10
      • 2010-11-22
      • 2014-02-24
      • 2011-08-26
      相关资源
      最近更新 更多