"Операция должна быть обновляемым запросом" VB.Net OleDB для Excel
Я пытался найти решение этой проблемы без какого-либо успеха:
Я использую VB.NET, и мне нужно читать и обновлять записи из файла Excel. Для этого я использую OleDB API. Он отлично работает для любого чтения, но невозможно записать в файл (запросы на обновление или вставку)
Вот что у меня есть:
Моя строка подключения:
Public connString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\...\Resources\attempt.xls;Extended Properties='Excel 8.0;HDR=YES;IMEX=1;'"
Выберите запрос, который работает нормально:
Dim checkQuery = "SELECT * FROM [Sheet1$] WHERE [TravellerPN] = @T"
Try
Using connection As New OleDb.OleDbConnection(Form.connString)
Dim checkCommand As New OleDbCommand(checkQuery, connection)
checkCommand.Parameters.Add("@T", OleDbType.VarChar).Value = PN
connection.Open()
Dim reader As OleDbDataReader = checkCommand.ExecuteReader()
Dim path As String = ""
While reader.Read()
path = reader("Datapath").ToString
End While
reader.Close()
MsgBox(PN & " " & DP & " " & path,,)
Если запись для введенного номера детали не существует и ничего не возвращается, вставьте новую строку
If path = "" Then
Dim addQuery = "INSERT INTO [Sheet1$] ([TravellerPN],[Datapath]) VALUES (@T, @D)"
Dim addCommand As New OleDbCommand(addQuery, connection)
addCommand.Parameters.Add("@T", OleDbType.VarChar).Value = PN
addCommand.Parameters.Add("@D", OleDbType.VarChar).Value = DP
Dim rows As Integer = addCommand.ExecuteNonQuery()
И это было то, где он возвращает ошибку.
MsgBox(rows & " row added!",, "") 'Never diplayed
И другой запрос, который тоже не работает:
Else 'If does exist, confirm replacement'
Dim replaceResponse = MsgBox("A path already exists for " & PN & "." & vbNewLine & "Do you want to replace " & path & " with " & DP & "?", MsgBoxStyle.YesNo, "Overwrite previous datapath?")
Dim replaceQuery = "UPDATE [Sheet1$] SET [Datapath] = @D WHERE [TravellerPN]=@T"
Dim replaceCommand As New OleDbCommand(replaceQuery, connection)
replaceCommand.Parameters.Add("@D", OleDbType.VarChar).Value = DP
replaceCommand.Parameters.Add("@T", OleDbType.VarChar).Value = PN
Dim rows As Integer = replaceCommand.ExecuteNonQuery()
MsgBox(rows & " row updated!",, "")
End If
connection.Close()
End Using
Я пытался исправить проблему: это могло быть вызвано разрешениями, поэтому я разрешил даже учетным записям гостей изменять мою папку.
Если бы это был режим ReadOnly в соединении: я пытался добавить Mode=ReadWrite, но моя строка соединения не работала после этого. (Эта опция доступна только для ADO-соединений?)
Я пытался запустить приложение от имени администратора
И наконец, я публикую это здесь в надежде получить некоторую помощь. Извините или длинный пост, я пытался дать все элементы, которые потенциально могут быть проблемой.
Благодарю.