2015-06-03 56 views
11

簡介問題:如何檢查matlab中原生ODBC連接的狀態?

的主要問題是沒有連接過程中,我可以連接到數據庫成功,在我的數據庫中插入一些行(冷杉代碼塊顯示了這一點),但後如果有人試圖在數據庫中插入一行,關閉連接,matlab將突然終止,沒有任何明確的錯誤消息,(我希望有一個函數來檢查連接是打開還是關閉,或獲取錯誤消息來處理錯誤但沒有這些發生,只是由於致命錯誤matlab關閉)

我寫了下面的代碼連接到MS SQL Server數據庫在MATLAB:

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); 

和每一件事情是確定的。

然後我試圖插入另一行(檢查錯誤信息是什麼)然後Matlab關閉(由於致命錯誤)而不顯示任何錯誤消息。

我嘗試使用以下功能插入新的原糖之前得到數據庫連接的狀態:

isconnection(conn); 
ping(conn); 

但它說

未定義功能「平」的 類型的輸入參數「數據庫.ODBCConnection」。

未定義功能「isconnection」類型 「database.ODBCConnection」

的輸入參數,即使我試圖用try-catch塊,但它並沒有爲致命錯誤工作和Matlab關閉。

所以我想知道是否有任何方法來阻止本地ODBC的狀態,以防止關閉連接時突然關閉的matlab?


更新:

>> 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' 

沒有屬性或消息之前改變和關閉連接後, 問題是,我不知道如何檢查,如果一個連接仍然在程序的其他部分打開或關閉! 在這種情況下,如果我在連接被關閉之前使用插入命令, matlab突然終止(並顯示消息MATLAB(R2013B)已停止工作), 所以我想知道是否有任何方法來檢查是否本機odbc連接之前已關閉?


此外更新

>> 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 

我的意思是像在上述用於如果一個連接是打開和0,如果連接之前閉合時返回1 JDBC連接的例子「isconnection」的功能。

回答

0

根據documentation,您可以通過檢查database.ODBCConnection對象和database.ODBCCursor對象中Message屬性的值來檢查數據庫工具箱中現有database.ODBCConnection或database.ODBCCursor的狀態。

您可能需要設置錯誤處理以使用setdbprefs('ErrorHandling','store')進行存儲。使用setdbprefs('ErrorHandling','report')將其切換回來。

pingisconnection只適用於數據庫連接對象,不適用於database.ODBCConnection對象。

+0

TNX了很多,我更新響應你的答案的問題,我認爲發生在MATLAB或「本地ODBC」層的錯誤,所以在連接對象沒有消息, –

1

我要求您使用Matlab的tooltrip功能檢查數據庫連接。你可以找到here...

您可以先進行測試,這樣就可以排除了與服務器的任何問題的完整指南..

一旦連接successfully..you可以檢查code.connection設置和相應地在你的代碼中應用它。

問候,

+0

TNX一很多,我之前看到過這個文檔,但主要問題不在連接過程中,我可以成功連接到數據庫,並在我的數據庫中插入一些行(第一個代碼塊顯示這一點),但在關閉連接後,如果有人試圖在數據庫中插入一行,matlab將突然關閉,沒有任何明確的錯誤信息,(我希望有一個函數來檢查連接是打開還是關閉,或者獲取錯誤消息來處理錯誤,但不是這些發生,只是由於致命錯誤而關閉matlab) –