【发布时间】: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。
【问题讨论】:
标签: database matlab odbc native