使用sql参数插入值

时间:2016-06-30 10:28:20

标签: sql vb.net tsql

我正在开发一个简单的储蓄账户申请,我可以模拟存款,取款和转账。我有一个名为"存款"的按钮。我可以点击,数据将记录在我的数据库中。

要生成插入语句,我使用的是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,然后这样可以正常工作吗?或者解决这个问题的最佳方法是什么?

3 个答案:

答案 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可能是个好主意(如果你当然需要它而不是由身份创造的那个。