所以基本上我正在尝试将下面的代码写入数据库,我的主键是 Int 并且它是 autogen,但是当写入数据库时它不允许我这样做,一直告诉我我不是'不允许输入空值(因为代码显然没有写入主键字段),所以我使用了行
cmd.Parameters.Add("@EventID", SqlDbType.Int).Value = 3
但问题是每次我想测试新记录(即 1、2、3、4 等)时,我都必须更改该值。我想知道是否可以输入一行代码,通过每次加 +1 来创建一个值,这样我就不需要每次都进入代码并输入新数字。下面是写入数据库的完整代码,以便您可以更好地查看它
Dim Con As SqlConnection
Dim cmd As SqlCommand
Dim recordsAffected As String
Dim cmdstring As String = "INSERT [Event Table](EventID, EventTypeID, EventName, VenueName, NumberOfGuests, Date, ClientAddress, WeddingName, BuildingAddress) Values(@EventID, @EventTypeID, @EventName, @VenueName, @NumberOfGuests, @Date, @ClientAddress, @WeddingName, @BuildingAddress)"
Con = New SqlConnection("Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\YellowDoor.mdf;Integrated Security=True;User Instance=True")
cmd = New SqlCommand(cmdstring, Con)
cmd.Parameters.Add("@EventID", SqlDbType.Int).Value = 3
cmd.Parameters.Add("@EventTypeID", SqlDbType.Text).Value = EventTypeDD.SelectedValue
cmd.Parameters.Add("@EventName", SqlDbType.Text).Value = EventNametxt.Text
cmd.Parameters.Add("@VenueName", SqlDbType.Text).Value = VenueLoDD.SelectedValue
cmd.Parameters.Add("@NumberOfGuests", SqlDbType.Int).Value = CInt(NumOfGtxt.Text)
cmd.Parameters.Add("@Date", SqlDbType.Int).Value = CInt(DateTxt.Text)
cmd.Parameters.Add("@ClientAddress", SqlDbType.Text).Value = txtAddress.Text
cmd.Parameters.Add("@WeddingName", SqlDbType.Text).Value = txtWedding.Text
cmd.Parameters.Add("@BuildingAddress", SqlDbType.Text).Value = txtBAddress.Text
Con.Open()
recordsAffected = cmd.ExecuteNonQuery
Con.Close()
最佳答案
如果您的 EventID
是 IDENTITY 列,则切勿尝试为其设置值。
只需忽略该字段作为参数或在 INSERT 命令中。
并且您可以通过这种方式检索数据库引擎分配给您的字段的值
Dim Con As SqlConnection
Dim cmd As SqlCommand
Dim cmdstring As String = "INSERT [Event Table] " & _
"(EventTypeID, EventName, VenueName, NumberOfGuests, [Date], ClientAddress, " & _
"WeddingName, BuildingAddress) Values(@EventTypeID, @EventName, @VenueName, " & _
"@NumberOfGuests, @Date, @ClientAddress, @WeddingName, @BuildingAddress); " & _
"SELECT SCOPE_IDENTITY()"
Using Con = New SqlConnection(".....")
Using cmd = New SqlCommand(cmdstring, Con)
cmd.Parameters.Add("@EventTypeID", SqlDbType.Text).Value = EventTypeDD.SelectedValue
.....
Con.Open()
Dim result = cmd.ExecuteScalar()
if result IsNot Nothing Then
Dim newEventID = Convert.ToInt32(result)
....
End If
End Using
End Using
使用此代码,您无需为 EventID 字段传递任何内容,但可以向查询添加第二个命令文本。第二个命令将返回数据库为您的连接生成的 IDENTITY 列的最后一个值。这个双命令(也称为批处理命令)是使用 ExecuteScalar 执行的,因为我们对 SELECT SCOPE_IDENTIY() 返回的单个值感兴趣。
另请注意,DATE 是 T-SQL 中的保留字,因此仅当将其括在方括号中时才可以将其用作列名
关于mysql - 如何通过代码生成新的主键ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27923362/