2015-06-03 31 views
11

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.

Trả lời

0

Theo documentation bạn có thể kiểm tra trạng thái của cơ sở dữ liệu hiện có.ODBCKết nối hoặc cơ sở dữ liệu.ODBCCursor trong hộp công cụ cơ sở dữ liệu bằng cách kiểm tra giá trị của thuộc tính Thư trong cơ sở dữ liệu.ODBCConnection đối tượng và cơ sở dữ liệu.ODBCCursor Object.

Bạn có thể cần đặt Xử lý lỗi để lưu trữ bằng cách sử dụng setdbprefs('ErrorHandling','store'). Sử dụng setdbprefs('ErrorHandling','report') để bật lại.

pingisconnection chỉ hoạt động trên đối tượng kết nối cơ sở dữ liệu chứ không phải trên cơ sở dữ liệu.ODBCĐối tượng kết nối.

+0

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, –

1

Tôi yêu cầu bạn kiểm tra kết nối cơ sở dữ liệu bằng chức năng toolstrip của Matlab. Bạn có thể tìm hướng dẫn đầy đủ từ here...

Bạn có thể thực hiện các thử nghiệm đầu tiên để bạn có thể loại trừ khả năng của bất kỳ vấn đề với máy chủ ..

Một khi nó được kết nối successfully..you có thể kiểm tra các thiết lập code.connection và áp dụng nó trong mã của bạn cho phù hợp.

Kính trọng,

+0

tnx một rất nhiều, tôi đã thấy tài liệu đó trước đây, nhưng vấn đề chính không có 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 vào cơ sở dữ liệu của tôi (khối mã thông báo cho thấy điều này), nhưng sau khi đóng kết nối chèn một hàng trong cơ sở dữ liệu, matlab sẽ đóng đột ngột mà không có thông báo lỗi rõ ràng, (tôi hy vọng sẽ có một chức năng để kiểm tra xem kết nối có đang mở hay đóng hay không nhận được thông báo lỗi để xử lý lỗi. matlab đóng vì lỗi nghiêm trọng) –

Các vấn đề liên quan