数量递增和Upsert问题

时间:2011-12-01 22:40:13

标签: vb.net upsert

代码遇到了很多麻烦。我正在尝试进行基本的upsert,并且可以使insert命令无问题地工作,但是Select和update并不能很好地协同工作。我已经尝试了各种方法来配置参数,如果我自己这么说的话,所有示例/从头开始构建它的方式都非常糟糕。

请注意我大约两周前拿起了VB.Net和编程。

所以我正在寻找的是配置参数的真实世界样本,和/或select和update语句可能出错的地方。我很确定问题不在于select语句本身更多的<>每次调试时,即使表中存在数据,它也会以0为单位返回。

目前使用VB Studio Express 2010,VB.Net和Access DB

    Dim sel As String = "SELECT ID FROM Stock WHERE ID = '" & txtID.Text & "'"
    Dim cmd As New OleDbCommand(sel, conn)
    conn.Open()
    Try
        cmd.ExecuteNonQuery()
        If dt.Rows.Count < 1 Then
            If radAdd.Checked = True Then
                Dim dbUP As String = ("Update Stock SET Qty = Qty +1 Where ID = '" & txtID.Text & "'")
                Dim cmdup As New OleDbCommand(dbUP, conn)
                cmdup.ExecuteNonQuery()
            Else
                Dim dbDW As String = ("Update Stock SET Qty = Qty -1 Where ID = '" & txtID.Text & "'")
                Dim cmdw As New OleDbCommand(dbDW, conn)
                cmdw.ExecuteNonQuery()
            End If
        Else
            Dim dbIns As String = "INSERT INTO Stock (ID, Qty, LastDate)"" VALUES ('" & txtID.Text & "', 1, Now())"
            Dim dc As New OleDbCommand(dbIns, conn)
            dc.ExecuteNonQuery()
        End If
    Catch ex As Exception
        MsgBox(ex.ToString)
    End Try
    conn.Close()

1 个答案:

答案 0 :(得分:0)

您需要做的是更改以下两行:

cmd.ExecuteNonQuery()
If dt.Rows.Count < 1 Then

于:     Dim oValue As Object

oValue = cmd.ExecuteScalar()
If oValue IsNot Nothing AndAlso oValue IsNot DBNull.Value Then

这样做只是从select命令中检索单个值,如果它不为null,则存在某些内容,因此您将进入更新代码。如果记录不存在,代码将返回dbnull.value或什么都没有,您将继续执行插入代码。