giới thiệu ngắn gọn về các vấn đề:cách kiểm tra trạng thái kết nối ODBC gốc trong MATLAB?
vấn đề chính không phải là trong thủ tục kết nối, tôi có thể kết nối với cơ sở dữ liệu thành công, và chèn một số hàng trong cơ sở dữ liệu của tôi (khối mã linh sam thấy điều này), nhưng sau khi đóng kết nối nếu ai đó cố gắng chèn một hàng trong cơ sở dữ liệu, MATLAB sẽ chấm dứt đột ngột mà không có bất kỳ thông báo lỗi rõ ràng nào, (tôi mong đợi có một chức năng để kiểm tra xem kết nối có đang mở hay đóng hay không). nhưng không phải những điều này đã xảy ra và chỉ MATLAB đóng vì lỗi nghiêm trọng)
tôi đã viết đoạn mã sau để kết nối với cơ sở dữ liệu MS SQL SERVER trong 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);
và mọi điều đều ổn.
sau đó tôi đã cố gắng chèn một hàng khác (để kiểm tra thông báo lỗi là) sau đó Matlab đóng (do lỗi nghiêm trọng) mà không hiển thị bất kỳ thông báo lỗi nào.
tôi đã cố gắng để sử dụng chức năng sau để có được trạng thái kết nối cơ sở dữ liệu trước khi chèn RAWS mới:
isconnection(conn);
ping(conn);
nhưng nó nói
Không xác định chức năng 'ping' cho các đối số đầu vào của loại 'cơ sở dữ liệu .ODBCConnection '.
Không xác định chức năng 'isconnection' cho các đối số đầu vào của loại 'database.ODBCConnection'
thậm chí tôi đã cố gắng để sử dụng try-catch block nhưng nó đã không làm việc và Matlab đóng cho lỗi nghiêm trọng.
vì vậy tôi muốn biết có cách nào để kiểm tra trạng thái của ODBC gốc để ngăn chặn đột ngột đóng cửa MATLAB trong trường hợp kết nối bị đóng không ??
Cập nhật:
>> 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'
không có tài sản hoặc thông điệp thay đổi trước và sau khi đóng kết nối, vấn đề là tôi không biết làm thế nào để kiểm tra xem nếu một kết nối là vẫn mở hoặc đóng trong các phần khác của chương trình! trong trường hợp này nếu tôi sử dụng lệnh chèn khi kết nối được đóng trước, MATLAB đột nhiên chấm dứt (và hiển thị thông báo MATLAB (R2013B) đã ngừng hoạt động), vì vậy tôi muốn biết là có cách nào để kiểm tra xem odbc kết nối đã đóng cửa trước khi?
cập nhật tiếp theo
>> 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
tôi có nghĩa là một chức năng như "isconnection" trong ví dụ trên cho kết nối jdbc trả về 1 nếu kết nối được mở và 0 nếu kết nối đóng trước.
tnx rất nhiều, tôi cập nhật các câu hỏi để đáp ứng với câu trả lời của bạn, tôi nghĩ rằng các lỗi xảy ra trong matlab hoặc trong "odbc mẹ đẻ" lớp, vì vậy không có tin nhắn trong đối tượng kết nối, –