Приращения 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.