2015-06-03 6 views
11

Kurze Einführung des Problems:Wie überprüft man den Status der nativen ODBC-Verbindung in Matlab?

das Hauptproblem nicht in der Verbindungsprozedur ist, ich erfolgreich zur Datenbank verbinden könnte, und einige Zeilen in meiner Datenbank (Tannen Codeblock zeigt dies) einfügen, aber nach Beim Schließen der Verbindung, wenn jemand versucht, eine Zeile in die Datenbank einzufügen, wird Matlab plötzlich ohne eine eindeutige Fehlermeldung beendet (ich erwarte eine Funktion, um zu prüfen, ob die Verbindung offen oder geschlossen ist oder um eine Fehlermeldung zur Behandlung des Fehlers zu erhalten) aber nicht von diesen passiert und nur Matlab geschlossen wegen eines fatalen Fehlers)

i schrieb den folgenden Code in MS SQL Server-Datenbank in Matlab verbinden:

conn=database.ODBCConnection('MS SQL SERVER','',''); 
insert(conn,'trace',{'obj_id','obj_type_id','time_step','pos_x','pos_y','vel_x','vel_y'},[1,1,1,0,0,0,0]); 
close(conn); 

und alles war in Ordnung.

Dann habe ich versucht, eine andere Zeile (, um zu überprüfen, was die Fehlermeldung ist) dann Matlab geschlossen (wegen schwerwiegender Fehler) ohne eine Fehlermeldung anzuzeigen.

Ich habe versucht, Funktionen zu verwenden folgende Status der Datenbankverbindung zu erhalten, bevor neue raws Einfügen:

isconnection(conn); 
ping(conn); 

aber es sagt

Undefinierte Funktion ‚Ping‘ für Eingabeargumente vom Typ Datenbank‘ .ODBCConnection '.

Undefinierte Funktion ‚isconnection‘ für Eingabeargumente vom Typ ‚database.ODBCConnection‘

sogar versucht, ich versuche-catch-Block zu verwenden, aber es hat nicht funktioniert und Matlab Closed für fatale Fehler.

Also ich möchte wissen, gibt es eine Möglichkeit, Status von nativen ODBC zu überprüfen, plötzlichen Abschluss von Matlab im Falle einer geschlossenen Verbindung zu verhindern ??


Update:

>> conn=database.ODBCConnection('MS SQL SERVER','','') 

conn = 

ODBCConnection with properties: 

    Instance: 'MS SQL SERVER' 
    UserName: '' 
    Message: [] 
    Handle: [1x1 database.internal.ODBCConnectHandle] 
    TimeOut: 0 
AutoCommit: 0 
     Type: 'ODBCConnection Object' 

>> close(conn) 
>> conn 

conn = 

ODBCConnection with properties: 

    Instance: 'MS SQL SERVER' 
    UserName: '' 
    Message: [] 
    Handle: [1x1 database.internal.ODBCConnectHandle] 
    TimeOut: 0 
AutoCommit: 0 
     Type: 'ODBCConnection Object' 

keine Immobilien oder Nachricht geändert vor und nach dem Schließen der Verbindung, das Problem ist, dass ich weiß nicht, wie das überprüfen, ob eine Verbindung in anderen Teilen eines Programms noch offen oder geschlossen! in diesem Fall, wenn ich einen Einfügebefehl verwenden, wenn eine Verbindung vorher geschlossen wurde, Matlab plötzlich beendet (und zeigen Sie die Meldung MATLAB (R2013B) hat aufgehört), so möchte ich wissen, gibt es eine Möglichkeit, um zu überprüfen, ob ein natives odbc Verbindung wurde zuvor geschlossen?


weitere Aktualisierungs

>> conn=database('MS SQL SERVER','','') 

conn = 

    Instance: 'MS SQL SERVER' 
    UserName: '' 
    Driver: [] 
     URL: [] 
Constructor: [1x1 com.mathworks.toolbox.database.databaseConnect] 
    Message: [] 
    Handle: [1x1 sun.jdbc.odbc.JdbcOdbcConnection] 
    TimeOut: 0 
AutoCommit: 'on' 
     Type: 'Database Object' 

>> isconnection(conn) 

ans = 

1 

>> close(conn) 
>> isconnection(conn) 

ans = 

0 

i bedeutet eine Funktion wie „isconnection“ in dem obigen Beispiel für die JDBC-Verbindung, die 1 zurückgibt, wenn eine Verbindung offen ist, und 0, wenn die Verbindung vor geschlossen.

Antwort

0

Gemäß dem documentation Sie können den Status einer bestehenden database.ODBCConnection oder database.ODBCCursor in der Datenbank Toolbox überprüfen, indem Sie den Wert der Message-Eigenschaft im database.ODBCConnection Objekt überprüft und das database.ODBCCursor Objekt.

Möglicherweise müssen Sie die Fehlerbehandlung zum Speichern unter Verwendung von setdbprefs('ErrorHandling','store') festlegen. Verwenden Sie setdbprefs('ErrorHandling','report'), um es wieder zurückzuschalten.

ping und isconnection arbeiten nur auf Datenbankverbindungsobjekt und nicht auf database.ODBCConnection Objekte.

+0

tnx viel, ich die Frage als Antwort auf Ihre Antwort aktualisiert, ich glaube, der Fehler in Matlab oder in „native odbc“ Schicht auftreten, so gibt es keine Meldung im Zusammenhang Objekt, –

1

Ich bitte Sie, die Datenbankverbindung mit Tooltrip-Funktionalität von Matlab zu überprüfen. Sie können komplette Anleitung finden von here...

Sie den Test zuerst durchführen können, so dass Sie aus jedem Problem mit dem Server kann .. ausgeschlossen

Sobald es angeschlossen ist successfully..you die code.connection Einstellungen überprüfen und Wenden Sie es in Ihrem Code entsprechend an.

Grüße,

+0

tnx ein viel, ich sah diese Dokumentation vor, aber das Hauptproblem ist nicht in der Verbindungsprozedur, ich konnte erfolgreich Verbindung zur Datenbank, und fügen Sie eine Zeile in meiner Datenbank (ersten Codeblock zeigt dies), aber nach dem Schließen der Verbindung, wenn jemand versucht Wenn Sie eine Zeile in die Datenbank einfügen, wird sich matlab plötzlich ohne eine klare Fehlermeldung schließen (ich erwarte eine Funktion, um zu prüfen, ob die Verbindung offen oder geschlossen ist oder um eine Fehlermeldung zu erhalten, aber nichts davon ist passiert) Matlab geschlossen wegen eines fatalen Fehlers) –