Подтвердить что ты не робот

Как проверить статус родного соединения 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, если соединение закрыто раньше.

4b9b3361

Ответ 1

Я прошу вас проверить соединение с базой данных с функциональными возможностями панели инструментов Matlab. Вы можете найти полное руководство от здесь...

Сначала вы можете выполнить тестирование, чтобы вы могли исключить любую проблему с сервером.

Как только он будет успешно подключен, вы можете проверить настройки кода. и соответствующим образом применить его в своем коде.

Привет,

Ответ 2

В соответствии с документацией вы можете проверить статус существующей базы данных .ODBCConnection или database.ODBCCursor в панели инструментов базы данных, проверив значение Свойство Message в объекте database.ODBCConnection и объекте database.ODBCCursor.

Вам может потребоваться установить обработку ошибок с помощью setdbprefs('ErrorHandling','store'). Используйте setdbprefs('ErrorHandling','report') для его повторного включения.

ping и isconnection работают только с объектом подключения к базе данных, а не с объектами database.ODBCConnection.