我正在开发一个简单的储蓄账户申请,我可以模拟存款,取款和转账。我有一个名为"存款"的按钮。我可以点击,数据将记录在我的数据库中。
要生成插入语句,我使用的是SQL参数,这就是代码:
SqlCon = New SqlConnection
SqlCon.ConnectionString = "............"
Try
Query = "INSERT INTO Transacoes(tpAccount, dateTransaction, descrTransaction, amoutTransaction, balanceTransaction)
VALUES(@tpAccount, @dateTransaction, @ddescrTransaction, @amoutTransaction, @balanceTransaction)"
SqlCon.Open()
SqlCmd = New SqlCommand(Query, SqlCon)
With SqlCmd.Parameters
.Add("@tpAccount", SqlDbType.Char).Value = cbTipoConta.Text
.Add("@dateTransaction", SqlDbType.DateTime).Value = txtDate.Text
.Add("@descrTransaction", SqlDbType.Char).Value = cmdDepositar.Text
.Add("@amoutTransaction", SqlDbType.Int).Value = txtDeposito.Text
.Add("@balanceTransaction", SqlDbType.Int).Value = txtBalance.Text
End With
SqlCmd.ExecuteNonQuery()
SqlCon.Close()
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
在这张表中我有一个" ID"列,但我不希望它显示在SQL参数上并显示错误:
无法将值NULL插入列' Id'`。
我应该自动增加Id,然后这样可以正常工作吗?或者解决这个问题的最佳方法是什么?
答案 0 :(得分:1)
你应该自动增加ID,我总是使用Identity(1,1)
的ID列,即使目前不需要它。快速选择特定行总是很好,当ID自动增加时,你只有一个where条件。
答案 1 :(得分:0)
为了能够省略insert语句中的ID字段,您需要在该字段上设置自动增量(标识)。
参考: https://technet.microsoft.com/en-gb/library/ms188263(v=sql.105).aspx
答案 2 :(得分:0)
身份不是唯一的解决方案。另一个名为序列。 在您的情况下,您可以简单地创建一个新的序列,如本例所示
create sequence dbo.id_sequence as int
start with 0
increment by 1;
有关创建序列的更多信息,您可以找到here
如果您有序列,则可以将其用作表格中任何列的defalut值,您可以在点 D here的示例中看到。如果需要,您甚至可以使用更多序列来处理表中的多个列。
identinty和sequence之间的区别在于,您只能将一个标识用于一列(使用序列或甚至序列,您可以使用一个表中的许多列执行此操作),对于集合标识,您需要重新创建表(更改不是在这种情况下允许)或删除带有标识的列并使用它创建一个新列(您需要了解约束和与已删除列的关系)。使用序列,您可以随时使用您需要的任何列更改表格。
使用序列,您可以更新或向列中插入值(您不能使用标识),因此,如果您使用此部分工作来模拟某些内容,那么使用原始ID可能是个好主意(如果你当然需要它而不是由身份创造的那个。