0

我只是在 LINQ 的世界中摸索,我已经设法让我的 VB 应用程序从我的 Azure DB 中选择,现在我正在尝试插入一个新用户。

我收到错误描述“当 IDENTITY_INSERT 设置为 OFF 时,无法在表 x 中插入标识列的显式值”。

我知道关于这个主题有类似的问题,但似乎他们中的大多数都遇到了问题,因为他们正试图插入一个明确的值,并且需要将标志更改为 ON。我试图在让数据库分配 ID 值的同时进行插入,所以我认为 IDENTITY_INSERT 标志应该关闭,我需要更改我的 VB 或 LINQ 语句以告诉它不要尝试为我的 ID 分配值柱子。

这是我在运行插入的 VB 表单按钮中的代码:

Private Sub btn_AddUser_Click(sender As Object, e As EventArgs) Handles btn_AddUser.Click
    Dim db As New stem1DataContext()

    Dim usr As New Users With
        {.firstname = txt_firstName.Text,
        .lastname = txt_lastName.Text,
        .username = txt_username.Text,
        .password = txt_password.Text,
        .email = txt_email.Text}

    db.Users.InsertOnSubmit(usr)

    Try
        db.SubmitChanges()
    Catch
        MsgBox("Form not valid:  " & Err.Description)
    End Try
End Sub

usr 语句包含表中的所有字段,除了 ID 列。我并没有真正看到我的代码试图在哪里插入 ID 列的值,但它可能在幕后某处执行此操作,我需要明确告诉它不要这样做。

用户表的 SQL 如下:

CREATE TABLE [dbo].[Users] (
[Id]        INT          IDENTITY (1, 1) NOT NULL,
[username]  VARCHAR (50) NOT NULL,
[firstname] VARCHAR (50) NOT NULL,
[lastname]  VARCHAR (50) NOT NULL,
[email]     VARCHAR (50) NOT NULL,
[password]  NCHAR (10)   NULL,
PRIMARY KEY CLUSTERED ([Id] ASC)
);

任何帮助将不胜感激。

4

1 回答 1

1

对于遇到此问题的其他人,我通过进入连接的 .dbml 解决了这个问题,并在表的 ID 列下查看了属性并将属性“自动生成的值”设置为 TRUE。

我也意识到,我有这个问题的原因。当我第一次创建表时,我忘记将 ID 字段设置为 Identity 列。后来我又回去更新了表格。事实证明,此更新不会修改 dbml,我认为这是有道理的,但您需要知道您需要进入并进行此额外更改以避免该问题。

于 2017-08-07T21:45:06.920 回答