如何在matlab中检查本机ODBC连接的状态?

Had*_*adi 11 database matlab odbc native

问题简介:

主要问题不在连接过程中,我可以成功连接到数据库,并在我的数据库中插入一些行(第一个代码块显示这个),但在关闭连接后,如果有人试图在数据库中插入一行,matlab将突然终止没有任何明确的错误消息,(我希望有一个功能来检查连接是否打开或关闭或获取错误消息来处理错误,但没有发生这些事情,只是因为致命的错误而关闭了matlab)

我写了以下代码连接到matlab中的MS SQL SERVER数据库:

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);
Run Code Online (Sandbox Code Playgroud)

一切都很好.

然后我试图插入另一行(以检查错误消息是什么)然后Matlab关闭(由于致命错误)而没有显示任何错误消息.

在插入新raw之前,我尝试使用以下函数来获取数据库连接的状态:

isconnection(conn);
ping(conn);
Run Code Online (Sandbox Code Playgroud)

但它说

未定义的函数'ping'表示'database.ODBCConnection'类型的输入参数.

对于'database.ODBCConnection'类型的输入参数,未定义的函数'isconnection'

即使我试图使用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'
Run Code Online (Sandbox Code Playgroud)

在关闭连接之前和之后没有更改任何属性或消息,问题是我不知道如果在程序的其他部分中连接仍然打开或关闭,如何检查!在这种情况下如果我在连接关闭之前使用插入命令,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
Run Code Online (Sandbox Code Playgroud)

我的意思是上面例子中的"isconnection"函数用于jdbc连接,如果连接打开则返回1,如果连接之前关闭则返回0.

App*_*234 0

根据 文档,您可以通过检查database.ODBCConnection对象和database.ODBCCursor对象中的Message属性值来检查数据库工具箱中现有database.ODBCConnection或database.ODBCCursor的状态。

您可能需要设置错误处理来存储使用setdbprefs('ErrorHandling','store')。使用setdbprefs('ErrorHandling','report')再次将其切换回来。

ping并且isconnection仅适用于数据库连接对象,不适用于database.ODBCConnection 对象。