none
Datenbankzugriff: System.Data.OleDb.OleDbException: Unspecified error? RRS feed

  • Frage

  • Hallo NG,

    dieser Fehler kommt, wenn ich irgenwelche daten aus der db hole. Wie ich bis jetzt herausgefunden habe liegt das Problem am zugriff auf die Temp-Datei im "Document settings\ServerName\ASPNET\Local settings\Temp".

    Leider kann ich diesen Ordner nicht finden um die nötigen Sicherheitsrechte einzustellen.  (Existiert dieser überhaupt?)

    Ich habe mittlerweile mit sehr vielen Sicherheitseinstellungen der Temp-Ordner rumprobiert, aber es funktioniert auch nicht.

    Wenn ich den IIS Neu starte, denke ich, dass es wieder funktionieren wird, aber das behebt das Problem nicht. Deshalb lasse ich die so. Ihr könnt auf www.comtel24.de nachschauen, was ich meine.

    Wie könnte ich dieses Problem noch lösen? Oder was mache ich falsch?


    DANKE Leute

    LG Kaan

    Sonntag, 21. November 2010 23:34

Antworten

  • Hallo Kaan,
    The Microsoft Jet database engine cannot open the file 'C:\Database\database.mdb'.  It is already opened exclusively by another user, or you need permission to view its data.

    ist das denn der Fall? Kann es sein, dass die Datenbankdatei noch von irgend etwas anderem verwendet wird? Bspw. direkt in Access oder in einer anderen Anwendung geöffnet, ...? Falls ja, lass das, das geht in den allermeisten Fällen nicht.

    Das könnte auch den anderen Fehler erklären.

    Alternativ kann es auch sein, dass Du die Verbindung(en) offen lässt (also nach Verwendung kein .Close und .Dispose auf alles anwendest, was irgendwie mit der Connection, deren Commands, ... zu tun hat) und es daher zu viele offene Verbindungen gibt. Da kommt zwar eigentlich eine andere Meldung aber einen Versuch, da mal nachzuschauen, ist es sicherlich wert :)

    Wenn Du die Datenbank sonst definitiv nirgends ansprichst, würd ich mal mit dem ProcessMonitor schauen, was genau da eigentlich nicht klappt.

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    Montag, 22. November 2010 08:44
    Moderator

Alle Antworten

  • Hallo Kaan,

    dieser Fehler kommt, wenn ich irgenwelche daten aus der db hole. Wie ich bis jetzt herausgefunden habe liegt das Problem am zugriff auf die Temp-Datei im "Document settings\ServerName\ASPNET\Local settings\Temp".

    und wie hast Du das rausbekommen? Im Normalfall sollte das eher, wenn überhaupt C:\Temp oder ähnliches sein.

    Der Fehler kann vielfältige Ursachen haben. Poste doch bitte mal deinen Code zum Öffnen der DB und den ConnectionString.

    Welches OS verwendest Du auf dem Webserver?



    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    Montag, 22. November 2010 07:43
    Moderator
  • Guten Morgen Stefan,

    hier der Code:

    Dim conStr As String = ConfigurationManager.ConnectionStrings("default").ConnectionString

     

    Dim objConn As New OleDbConnection(conStr)

    objConn.Open()

    ------------------------

    web.config:

     

    <connectionStrings>

    <add name="default" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Mode=ReadWrite;Data Source=|DataDirectory|\database.mdb;Persist Security Info=false" providerName="System.Data.OleDb"/>

    </connectionStrings>

    -------------------------

     

    Wie ich es herausgefunden habe:-) Naja, bisschen gegoogelt, nach dem Fehlercode sollte es dass sein:

    http://support.microsoft.com/kb/825738

     

    ich habe noch dies probiert:

    web.config +:

     <identity impersonate="false" />

     

    OS ist windows 2003 server 64bit

    LG 

     

     

    Montag, 22. November 2010 07:59
  • Hallo Kaan,

    <add name="default" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Mode=ReadWrite;Data Source=|DataDirectory|\database.mdb;Persist Security Info=false" providerName="System.Data.OleDb"/>

    probier mal bitte, die .mdb in einen anderen Ordner zu legen, bspw. X:\Irgendwas :)

    Diesem Ordner gibst Du das Recht "Ändern" für NETZWERKDIENST bzw. NETWORK SERVICE  bzw. dem Account, der den betreffenden Application Pool ausführt.

    Den ConnectionString dann bitte entsprechend anpassen und |DataDirectory| mit dem Pfad ersetzen.

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    Montag, 22. November 2010 08:10
    Moderator
  • Hab ich gemacht. Fehler:

     

    The given path's format is not supported.

    Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

    Exception Details: System.NotSupportedException: The given path's format is not supported.

    Source Error: 

    Line 7:     'Connectionstring wird aufgebaut und geöffnet
    Line 8:     Dim conStr As String = ConfigurationManager.ConnectionStrings("default").ConnectionString
    Line 9:     Dim objConn As New OleDbConnection(conStr)
    Line 10:     objConn.Open()
    Line 11: 

    Montag, 22. November 2010 08:14
  • Him

    Hab ich gemacht. Fehler:

    The given path's format is not supported.

    da würde ich sagen, hast Du was falsch gemacht :) Poste doch mal bitte nochmal den ConnectionString, da steht ziemlich sicher was drin, was nicht stimmt.

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    Montag, 22. November 2010 08:20
    Moderator
  • <connectionStrings>
    <add name="default" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Mode=ReadWrite;Data Source=|DataDirectory|C:\Database\database.mdb;Persist Security Info=false" providerName="System.Data.OleDb"/>
    </connectionStrings>
    Montag, 22. November 2010 08:21
  • <connectionStrings>
    <add name="default" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Mode=ReadWrite;Data Source=|DataDirectory|C:\Database\database.mdb;Persist Security Info=false" providerName="System.Data.OleDb"/>
    </connectionStrings>

    Ich sagte "ersetzen", nicht drin lassen :)

      |DataDirectory|C:\Database\database.mdb;

    sollte also

      C:\Database\database.mdb;

    lauten.

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    Montag, 22. November 2010 08:25
    Moderator
  • :-) Ok, hab verstanden...

     

    und jetzt:

    The Microsoft Jet database engine cannot open the file 'C:\Database\database.mdb'.  It is already opened exclusively by another user, or you need permission to view its data.

    Montag, 22. November 2010 08:28
  • Hallo Kaan,
    The Microsoft Jet database engine cannot open the file 'C:\Database\database.mdb'.  It is already opened exclusively by another user, or you need permission to view its data.

    ist das denn der Fall? Kann es sein, dass die Datenbankdatei noch von irgend etwas anderem verwendet wird? Bspw. direkt in Access oder in einer anderen Anwendung geöffnet, ...? Falls ja, lass das, das geht in den allermeisten Fällen nicht.

    Das könnte auch den anderen Fehler erklären.

    Alternativ kann es auch sein, dass Du die Verbindung(en) offen lässt (also nach Verwendung kein .Close und .Dispose auf alles anwendest, was irgendwie mit der Connection, deren Commands, ... zu tun hat) und es daher zu viele offene Verbindungen gibt. Da kommt zwar eigentlich eine andere Meldung aber einen Versuch, da mal nachzuschauen, ist es sicherlich wert :)

    Wenn Du die Datenbank sonst definitiv nirgends ansprichst, würd ich mal mit dem ProcessMonitor schauen, was genau da eigentlich nicht klappt.

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    Montag, 22. November 2010 08:44
    Moderator
  • Hi Stefan,


    ich denke nicht, dass die Verbindung noch offen ist oder das ein anderer Prozess drauf zugreift, weill der Server ist neu aufgesetzt und die DB ist doch kopiert worden in den anderen Ordner. Jedenfalls habe ich dem Ordner "C:\Database" den User IWAM_plesk(default) hinzugefügt und diesem User Vollzugriff gestattet. jetzt funktioniert es, komischerweise. Letzte frage hoffe ich für Heute :-)

    Hab ich dadurch Sicherheitsprobleme?

     

    Montag, 22. November 2010 08:56
  • Hallo Kaan,

    Jedenfalls habe ich dem Ordner "C:\Database" den User IWAM_plesk(default) hinzugefügt und diesem User Vollzugriff gestattet. jetzt funktioniert es, komischerweise.

    Vergib das Recht "Ändern", nicht "Vollzugriff". Sicherheitsprobleme hast Du damit eigentlich nicht mehr als wenn Du es mit einem eigenen Account wie bspw. NETZWERKDIENST machst. Falls auf diesem Server auch andere ihre Skripte einspielen können, sollte man aber schauen, dass jedes Web mit einem eigenen Account läuft.

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    Montag, 22. November 2010 09:07
    Moderator
  • Hallo Kaan,

    haben die Antworten dir geholfen, das Problem zu lösen? Falls ja, wäre es prima, wenn Du die Antworten auch als solche markieren und hilfreiche Postings bewerten könntest.

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    Donnerstag, 25. November 2010 18:59
    Moderator
  • Hallo Stefan,

     

    bitte entschuldige, hatte in den letzten sehr wenig Zeit. Nein, das Problem besteht immer noch. Was der Fehler kommt zwar seltener vor, aber es ist immer noch vorhanden. Wenn du sonst noch eine Idee hast? Ich werde jetzt mal den gesamten Code durchgehen, ob ich doch irgendwo einen Connection.Close vergessen habe...

     

    LG Kaan

    Freitag, 26. November 2010 18:23
  • Hallo Kaan,

    Nein, das Problem besteht immer noch. Was der Fehler kommt zwar seltener vor, aber es ist immer noch vorhanden. Wenn du sonst noch eine Idee hast?

    welche Fehlermeldung kommt denn nun?  "already opened exclusively by another user..." oder "Unspecified error"?

    Wenn Plesk immer noch so arbeitet wie früher, kann ich mir da einige mögliche Ursachen vorstellen. Bspw. Dateikopieraktionen, da Dateien, die per FTP hochgeladen werden, gar nicht direkt im Zielordner landen, sondern erst verzögert in den Zielordner kommen. Das könnte dann dazu führen, dass die Datei momentan im Zugriff ist.

    Kannst Du testweise mal eine Website anlegen, die überhaupt nicht von Plesk angefasst wird (wenn das überhaupt geht, ansonsten Plesk mal komplett deinstallieren). Wenn das nicht geht, kannst Du die Website mal auf einem Server anlegen, auf dem kein Plesk installiert ist?

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    Samstag, 27. November 2010 14:13
    Moderator
  • Hallo Stefan,

    ich habe den Fehler gefunden. Es lag doch an einer offenen Connection, diese habe ich übersehen. Sorry für die Anstrengung, aber mir kam es komisch vor, weil wir die DB ausgelagert hatten, dann kam der Fehler seltener.

    Trotzdem vielen vielen dank Stefan.

     

    LG Kaan

    Sonntag, 28. November 2010 21:56