Как проверить статус родного соединения 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 закрылся (из-за фатальной ошибки), не показывая никаких сообщений об ошибке.
Я попытался использовать следующие функции для получения статуса соединения с базой данных перед вставкой новых raw файлов:
isconnection(conn);
ping(conn);
но он говорит
Undefined функция 'ping' для входных аргументов типа 'Database.ODBCConnection'.
Undefined функция 'isconnection' для входных аргументов типа 'Database.ODBCConnection'
даже я попытался использовать блок try-catch, но он не работал, и Matlab Closed для фатальной ошибки.
, поэтому я хочу знать, есть ли какой-либо способ сохранить статус собственного ODBC, чтобы предотвратить внезапное закрытие Matlab в случае закрытого соединения
Update:
>> 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
i означает такую функцию, как "isconnection" в приведенном выше примере для соединения jdbc, который возвращает 1, если соединение открыто, и 0, если соединение закрыто раньше.
Ответы
Ответ 1
Я прошу вас проверить соединение с базой данных с функциональными возможностями панели инструментов Matlab. Вы можете найти полное руководство от здесь...
Сначала вы можете выполнить тестирование, чтобы вы могли исключить любую проблему с сервером.
Как только он будет успешно подключен, вы можете проверить настройки кода. и соответствующим образом применить его в своем коде.
Привет,
Ответ 2
В соответствии с документацией вы можете проверить статус существующей базы данных .ODBCConnection или database.ODBCCursor в панели инструментов базы данных, проверив значение Свойство Message в объекте database.ODBCConnection и объекте database.ODBCCursor.
Вам может потребоваться установить обработку ошибок с помощью setdbprefs('ErrorHandling','store')
. Используйте setdbprefs('ErrorHandling','report')
для его повторного включения.
ping
и isconnection
работают только с объектом подключения к базе данных, а не с объектами database.ODBCConnection.