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

Posted

技术标签:

【中文标题】如何在 matlab 中检查本机 ODBC 连接的状态?【英文标题】:how to check status of native ODBC connection in matlab? 【发布时间】:2015-06-03 10:44:33 【问题描述】:

问题简介:

主要问题不在于连接过程,我可以成功连接到数据库,并在我的数据库中插入一些行(第一个代码块显示了这一点),但是在关闭连接后如果有人试图在数据库中插入一行,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);

一切都很好。

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

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

isconnection(conn);
ping(conn);

但它说

未定义函数 'ping' 用于输入参数类型 'database.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) has stop working), 所以我想知道有什么方法可以检查本机 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

我的意思是上面示例中用于 jdbc 连接的类似“isconnection”的函数,如果连接打开则返回 1,如果连接之前关闭则返回 0。

【问题讨论】:

【参考方案1】:

我请求您使用 Matlab 的工具条功能检查数据库连接。你可以从here...找到完整的指南

您可以先进行测试,这样您就可以排除服务器的任何问题..

连接成功后..您可以检查 code.connection 设置并相应地将其应用到您的代码中。

问候,

【讨论】:

tnx 很多,我之前看过那个文档,但主要问题不在于连接过程,我可以成功连接到数据库,并在我的数据库中插入一些行(第一个代码块显示了这一点) ,但是在关闭连接后,如果有人试图在数据库中插入一行,matlab 将突然关闭而没有任何明确的错误消息,(我希望有一个函数来检查连接是打开还是关闭或得到一个错误消息处理错误,但没有发生这些错误,只是由于致命错误而关闭了 matlab)【参考方案2】:

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

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

pingisconnection 仅适用于数据库连接对象,不适用于 database.ODBCConnection 对象。

【讨论】:

tnx 很多,我根据您的回答更新了问题,我认为错误发生在 matlab 或“native odbc”层中,因此连接对象中没有消息,

以上是关于如何在 matlab 中检查本机 ODBC 连接的状态?的主要内容,如果未能解决你的问题,请参考以下文章

本机与ODBC数据库连接

请问如何配置ODBC连接远程的SQL Server数据库?

SQL Server 后端和 Access 前端 - 与 SQL Server 本机客户端的 ODBC 连接失败

如何检查我的 ODBC 数据源是不是存在于 PHP 中?

我们正在使用Sybase / ODBC如何在运行长批量SQL查询时处理断开连接?

MATLAB连接ACCESS数据库