问题简介:
主要问题不在连接过程中,我可以成功连接到数据库,并在我的数据库中插入一些行(第一个代码块显示这个),但是在关闭连接后如果有人试图在数据库中插入一行,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关闭(由于致命错误)而没有显示任何错误消息。
我尝试使用以下函数在插入新raws之前获取数据库连接的状态:
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'
关闭连接之前和之后没有更改任何属性或消息, 问题是我不知道如果在程序的其他部分中连接仍然打开或关闭,如何检查! 在这种情况下如果我在之前关闭连接时使用insert命令, 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
我的意思是上面例子中的“isconnection”函数用于jdbc连接,如果连接打开则返回1,如果连接之前关闭则返回0。
答案 0 :(得分:1)
我请求您使用Matlab的toolstrip功能检查数据库连接。您可以从here...
找到完整的指南您可以先执行测试,以便排除服务器的任何问题..
连接成功后..您可以检查code.connection设置并相应地将其应用到您的代码中。
此致
答案 1 :(得分:0)
根据documentation,您可以通过检查database.ODBCConnection对象和database.ODBCCursor对象中Message属性的值来检查数据库工具箱中现有database.ODBCConnection或database.ODBCCursor的状态。
您可能需要使用setdbprefs('ErrorHandling','store')
将错误处理设置为存储。使用setdbprefs('ErrorHandling','report')
将其重新切换回来。
ping
和isconnection
仅适用于数据库连接对象,而不适用于database.ODBCConnection对象。