8

Ich habe einen seltsamen Fehler, der zum Absturz meiner Anwendung führt. Es passiert nur, wenn es kompiliert und mit einem Klick installiert wird und nicht beim Debuggen in Visual Studio.SQL Server CE-Fehler - nur auf kompilierten Code

Anzeigen des Ereignisprotokolls gibt mir dies:

<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event"> 
    <System> 
    <Provider Name="Windows Error Reporting" /> 
    <EventID Qualifiers="0">1001</EventID> 
    <Level>4</Level> 
    <Task>0</Task> 
    <Keywords>0x80000000000000</Keywords> 
    <TimeCreated SystemTime="2015-04-27T14:51:30.000000000Z" /> 
    <EventRecordID>6471</EventRecordID> 
    <Channel>Application</Channel> 
    <Computer>me.local</Computer> 
    <Security /> 
    </System> 
- <EventData> 
    <Data /> 
    <Data>0</Data> 
    <Data>CLR20r3</Data> 
    <Data>Not available</Data> 
    <Data>0</Data> 
    <Data>calibration certificate builder</Data> 
    <Data>1.0.0.0</Data> 
    <Data>553e4aaa</Data> 
    <Data>System.Data.SqlServerCe</Data> 
    <Data>3.5.8080.0</Data> 
    <Data>4b743b2d</Data> 
    <Data>e3</Data> 
    <Data>0</Data> 
    <Data>System.ArgumentNullException</Data> 
    <Data /> 
    <Data>C:\Users\me\AppData\Local\Temp\WER80E0.tmp.WERInternalMetadata.xml</Data> 
    <Data>C:\Users\me\AppData\Local\Microsoft\Windows\WER\ReportArchive\AppCrash_pick_cert_e053eebdc3d787d726058a9b0d3405c6f279444_3b258dcb</Data> 
    <Data /> 
    <Data>0</Data> 
    <Data>e12fbed6-ecec-11e4-b276-24fd52358985</Data> 
    <Data>65</Data> 
    </EventData> 
</Event> 

Ich bin nicht sicher, wie das zu handhaben. Ich habe meinen Code durchgesehen und es scheint dort kein Problem zu sein. Es scheint irgendwo im SQL Server CE-Code zu sein, aber ich konnte es nicht finden.

Ich schob auch die event.ExceptionObject Zeichenfolge in eine Textdatei und bekam dies:

System.ArgumentNullException: Wert nicht null sein kann. bei System.Threading.Monitor.Enter (Object obj) bei System.Data.SqlServerCe.SqlCeCommand.Dispose (Boolean disposing) bei System.Data.SqlServerCe.SqlCeCommand.Finalize()

kann jemand helfen interpretiere ich das?

Ich habe die Verwendung der SQL CE-Dienste von anderen Threads entfernt. Ich entfernte auch die Entsorgung der SQL CE-Verbindung und auch die endgültigen Blöcke, aber die Fehlerprotokolle bleiben gleich.

Gibt es bei der Entsorgung der Verbindung ein Problem?

+0

Wahrscheinlich nicht direkt verwandt, aber: Sie entsorgt Ihre SQL-Befehl (und wahrscheinlich andere Ressourcen wie die SQLCeConnection) durch ihre Finalizer, anstatt sie in einem 'using' Block und Entsorgung von ihnen wenn du mit ihnen fertig bist. Ich würde auch Ihre Konfiguration auf Pfade usw. überprüfen, die für Ihre installierte Anwendung unterschiedlich sein könnten. Und schließlich vermute ich, dass Sie den Befehl "try {....} catch" verwenden. {/ * Nichts tun, nicht einmal den Fehler protokollieren * /} 'Muster. – Alex

+0

Ja, ich mache das und benutze Try/Catch Pattern. Ich werde auch auf die Entsorgung der Verbindung achten. Vielen Dank. – redned

+0

Sie können Befehl und Verbindungsobjekte über Threads nicht teilen – ErikEJ

Antwort

1

Ich vermute, dass Sie versuchen, eine Verbindung mit SQL-Datenbank mit Windows-Authentifizierung Verbindungszeichenfolge und diese Person hat keinen Zugriff auf SQL-Datenbank. Versuchen Sie, die Verbindungszeichenfolge mit einer Benutzer-ID und einem Kennwort zu ändern. Ändern von "Data Source=URDATABASE;Initial Catalog=MYDATABASE;Integrated Security=True" zu

+0

Hallo, danke für die Antwort. Ich habe es gerade gesehen. Ich frage eine lokale SQL CE-Datenbank ab und meine Verbindungszeichenfolge lautet: 'Data Source = | DataDirectory | \ MyDatabase.sdf; Max. Datenbankgröße = 4091' Beim Abfragen und Synchronisieren mit der fernen Datenbank wird die Verbindungszeichenfolge 'Datenquelle = MYIPADDRESS; Anfangskatalog = MYDATABASE; Persist-Sicherheitsinformation = True; Benutzer-ID = Benutzer; Kennwort = MYPASSWORD'. – redned