Приращения Qty и проблемы с Upsert

Имею довольно много проблем с кодом. Я пытаюсь выполнить базовый взлет и могу заставить команду вставки работать без проблем, однако выбор и обновление не сочетаются друг с другом. Я пробовал различные способы настройки параметров, и все примеры/построившие его с самого начала, провалились довольно ужасно, если я так говорю сам.

Обратите внимание, что я взял VB.Net и программировал в целом примерно 2 недели назад.

Так что я ищу, это образец реального мира для настройки параметров и/или что может быть неправильно с операциями 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 ответ

Что вам нужно сделать, это изменить следующие две строки:

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

to: Dim oValue As Object

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

То, что это делает, просто извлекает одно значение из команды select и, если оно не является нулевым, то что-то существует, поэтому вы попадаете в код обновления. Если запись не существует, код вернет dbnull.value или ничего, и вы перейдете к вашему вставляемому коду.

licensed under cc by-sa 3.0 with attribution.