2015-06-03 29 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) –