我一直试图找到解决这个问题的方法,但没有取得任何成功:
我使用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连接?)
我尝试以管理员身份运行该应用
最后,我在这里发帖,希望得到一些帮助。 对不起或长篇文章,我试图提供可能存在问题的所有元素。
感谢。