"Операция должна быть обновляемым запросом" 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-соединений?)

Я пытался запустить приложение от имени администратора

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

Благодарю.

0 ответов

Другие вопросы по тегам