Gracias a los dos por las respuestas. Casi estoy más de acuerdo con xknown porque todos los usuarios que tenían la base de datos abierta la cerraron (en ese momento eran sólo 3 y nunca suele haber más de 6 ó 7) y la aplicación ASP.Net seguía dando el mismo fallo.
Sigo insistiendo en el tema de los permisos porque cualquier base de datos Access a la que intentara conectar devolvía el mismo fallo. Ahora funciona sin problemas, aunque han vuelto a desaparecer los permisos.
Las conexiones las hago así (en un módulo aparte):
Código:
Public Class datosOLE
Private con As OleDbConnection
Public Sub New()
Try
con = New OleDbConnection(ConfigurationSettings.AppSettings("conOle"))
Catch ex As OleDbException
Throw New Exception("Error Ole" & ex.ErrorCode & ": " & ex.Message)
End Try
End Sub
Public Sub New(ByVal constring As String)
con = New OleDbConnection(constring)
End Sub
Public Function EjecutaNonQuery(ByVal strsql As String) As Integer
Dim cmd As New OleDbCommand(strsql, con)
Try
con.Open()
Dim n As Integer = cmd.ExecuteNonQuery
Return n
Catch ex As OleDbException
Throw New Exception("Error Ole " & ex.ErrorCode & ": " & ex.Message)
Finally
If con.State.Open = ConnectionState.Open Then
con.Close()
End If
End Try
cmd.Dispose()
End Function
Public Function EjecutaScalar(ByVal strsql As String) As String
Dim cmd As New OleDbCommand(strsql, con)
Try
con.Open()
Dim obj As Object = cmd.ExecuteScalar
If obj Is DBNull.Value Then obj = ""
Return String.Format("{0}", obj)
Catch ex As OleDbException
Throw New Exception("Error" & ex.ErrorCode & ": " & ex.Message)
Finally
If con.State.Open = ConnectionState.Open Then
con.Close()
End If
End Try
cmd.Dispose()
End Function
Public Function DevuelveDT(ByVal strSQL As String) As DataTable
Dim cmd As OleDbCommand
Try
cmd = New OleDbCommand(strSQL, con)
Catch ex As OleDbException
Throw New Exception("Error" & ex.ErrorCode & ": " & ex.Message)
End Try
Dim dt As New DataTable
dt.Clear()
Dim da As OleDbDataAdapter
Try
da = New OleDbDataAdapter(cmd)
Catch ex As OleDbException
Throw New Exception("Error" & ex.ErrorCode & ": " & ex.Message)
End Try
Try
da.Fill(dt)
Return dt
Catch ex As OleDbException
Throw New Exception("Error" & ex.ErrorCode & ": " & ex.Message)
Finally
If con.State.Open = ConnectionState.Open Then
con.Close()
End If
End Try
cmd.Dispose()
da.Dispose()
End Function
Public Function DevuelveDS(ByVal strSQL As String) As DataSet
Dim cmd As New OleDbCommand(strSQL, con)
Dim ds As New DataSet
ds.Clear()
Dim da As New OleDbDataAdapter(cmd)
Try
da.Fill(ds)
Return ds
Catch ex As SqlException
Throw New Exception("Error " & ex.Number & ": " & ex.Message)
Finally
If con.State.Open = ConnectionState.Open Then
con.Close()
End If
End Try
cmd.Dispose()
da.Dispose()
End Function
End Class
Por lo que en principio siempre las cierro.
Gracias y un saludo.