BassamKassem Ответов: 1

Я не знаю, почему команда update не работает с использованием oledb в файле MDF с помощью запроса параметров


Я не знаю, почему команда Update не работает с использованием OleDB в файле MDF с помощью запроса параметров

Он работает нормально при использовании того же кода ниже но SQL клиент обновляет базу данных SQL server но при попытке обновить базу данных access он не дал никакой ошибки и никаких изменений в записи не произошло

Что я уже пробовал:

Dim cnnOLEDB As New OleDbConnection
Dim cmdOLEDB As New OleDbCommand
Dim cmdInsert As New OleDbCommand
Dim cmdUpdate As New OleDbCommand
Dim cmdDelete As New OleDbCommand



Dim strConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & My.Computer.FileSystem.SpecialDirectories.Desktop & "\SupplierDB.mdb"



Dim strUpdate As String
Dim strSelect As String
DateUpdated.Text = Today
UpdatedBy.Text = SystemUserName
Dim DialString As String = TXT_Dial.Text
Dim FirstChar As Char = DialString.Chars(0)
If FirstChar = "0" Then
    DialString = DialString.Remove(0, 1)
End If
If cnnOLEDB.State = ConnectionState.Closed Then
    cnnOLEDB.Open()
End If
strSelect = "Select * From Customers"
strSelect &= "WHERE ID = (ID = @TXT_Cust_Record_ID)"
strUpdate = "Update Customers "
strUpdate &= "SET ServiceName =@TXT_ServName, Dial = @DialString, SupplierName = @TXT_SupplierName, ShortCode = @TXT_ShortCode, SR = @TXT_SR_ID, DateAdded = @DateAdded, ActionType = @TXT_Action, DateUpdated = @DateUpdated, UpdatedBy = @UpdatedBy, Reason = @TXTReason"
strUpdate &= " WHERE ID = @TXT_Cust_Record_ID;"
cmdUpdate = New OleDbCommand(strUpdate, cnnOLEDB)
cmdUpdate.CommandText = strUpdate
cmdUpdate.Parameters.AddWithValue("@DialString", DialString)
cmdUpdate.Parameters.AddWithValue("@TXT_ServName", TXT_ServName.Text)
cmdUpdate.Parameters.AddWithValue("@TXT_SupplierName", TXT_SupplierName.Text)
cmdUpdate.Parameters.AddWithValue("@TXT_ShortCode", TXT_ShortCode.Text)
cmdUpdate.Parameters.AddWithValue("@TXT_SR_ID", TXT_SR_ID.Text)
cmdUpdate.Parameters.AddWithValue("@DateAdded", DateAdded.Text)
cmdUpdate.Parameters.AddWithValue("@SystemUserName", SystemUserName)
cmdUpdate.Parameters.AddWithValue("@TXT_Action", TXT_Action.SelectedItem)
cmdUpdate.Parameters.AddWithValue("@DateUpdated", Now)
cmdUpdate.Parameters.AddWithValue("@UpdatedBy", UpdatedBy.Text)
cmdUpdate.Parameters.AddWithValue("@TXTReason", TXTReason.SelectedItem)
cmdUpdate.Parameters.AddWithValue("@TXT_Alias", TXT_Alias.Text)
cmdUpdate.Parameters.AddWithValue("@TXT_Cust_Record_ID", TXT_Cust_Record_ID.Text)

cmdUpdate.ExecuteNonQuery()

Richard MacCutchan

Вы добавляете три параметра, на которые нет ссылок в инструкции UPDATE: @SystemUserName, @TXT_Alias и @TXT_Cust_Record_ID- Разве это важно?

1 Ответов

Рейтинг:
4

OriginalGriff

Это выглядит неправильно:

strSelect = "Select * From Customers"
strSelect &= "WHERE ID = (ID = @TXT_Cust_Record_ID)"
Но это не повлияет на обновление.

Это означает, что мы не можем сказать - у нас нет доступа к вашей БД или к значениям, которые вы ей передаете, особенно к значениям, которые вы ей передаете.
@TXT_Cust_Record_ID
ценность.

Так что все будет зависеть от тебя.
К счастью, у вас есть инструмент, который поможет вам выяснить, что происходит: отладчик. Если вы не знаете, как его использовать, то быстрый Google для "Visual Studio debugger" должен дать вам необходимую информацию.

Поместите точку останова в первую строку функции и запустите код через отладчик. Затем посмотрите на свой код и на свои данные и определите, что должно произойти вручную. Затем по одному шагу в каждой строке проверяйте, что то, что вы ожидали, произойдет именно так, как и произошло. Когда это не так, тогда у вас есть проблема, и вы можете вернуться назад (или запустить ее снова и посмотреть более внимательно), чтобы выяснить, почему. Когда вы точно знаете, что передается в SQL, и проверили в yoru DB, чтобы увидеть, есть ли какие-либо совпадающие записи, вы можете начать думать о том, почему это проблема. Я бы предположил, что ни одна строка не соответствует значению ID, но у меня нет никакого доступа к данным для проверки.

Извините, но мы не можем сделать это за вас - пришло время вам освоить новый (и очень, очень полезный) навык: отладку!


BassamKassem

вы были правы , я отладил значение, и оказалось, что проблема была в @TXT_Cust_Record_ID из запроса SELECT, с которого я его изменил

strSelect = "выбрать * из клиентов"
strSelect &= "где ID = (ID = @TXT_Cust_Record_ID)"

к

strSelect = "выбрать * из клиентов"
strSelect &= "где ID = (@TXT_Cust_Record_ID)"