如何从Matlab连接到Microsoft SQL Server 2008(MSSQL)?

Con*_*ngo 11 sql-server matlab sql-server-2008

这可能是一个简单的问题:

  • 如何从Matlab连接到Microsoft SQL Server 2008 R2?
  • 给定一些SQL查询,如何将表读入矩阵?

更新

我更喜欢一种不需要使用ODBC手动设置的方法.

Amr*_*mro 26

我在下面回顾一下在MATLAB中访问数据库的不同方法.这是Stack Overflow问题的列表,其中一些问题已经讨论过了:

Java的

MATLAB有一个嵌入式Java JVM,允许您直接从MATLAB 调用JDBC驱动程序.首先需要在MATLAB中的Java classpth中使它们可用:

javaclasspath('sqljdbc4.jar');

%# load driver and create connection
driver = com.microsoft.sqlserver.jdbc.SQLServerDriver;
conn  = driver.connect('jdbc:sqlserver://<HOST>:<PORT>;databaseName=<DB>');

%# query database
q = conn.prepareStatement('select * from <TABLE>');
rs = q.executeQuery();
while rs.next()
    char(rs.getString(0))
end
rs.close();
conn.close();
Run Code Online (Sandbox Code Playgroud)

数据库工具箱

如果您可以访问数据库工具箱,它可以简化上述操作,因为它充当JDBC/ODBC内容的包装:

conn = database('<DB>', '<USER>','<PASS>', ...
    'com.microsoft.sqlserver.jdbc.SQLServerDriver', ...
    'jdbc:sqlserver://<HOST>:<PORT>;database=<DB>');
curs = exec(conn, 'select * from <TABLE>');
curs = fetch(curs);
curs.Data
close(curs)
close(conn)
Run Code Online (Sandbox Code Playgroud)

您还可以通过ODBC访问数据库.首先创建一个DSN到MSSQL Server(Control Panel > ODBC Data Sources),然后从数据库工具箱中使用它:

conn = database('myDB', '', '');    %# User/System DSN
%...
close(conn)
Run Code Online (Sandbox Code Playgroud)

COM

您可以直接使用MATLAB中的ADO OLEDB组件.一种方法是指定连接字符串(无DNS):

conn = actxserver('ADODB.Connection');
conn.Open('Provider=sqloledb;Data Source=<HOST>;Initial Catalog=<DB>;User Id=<USER>;Password=<PASS>;');
conn.Execute('select * from <TABLE>').GetRows
conn.Close()
Run Code Online (Sandbox Code Playgroud)

.净

最后,最新版本的MATLAB增加了从MATLAB调用.NET的能力.所以你可以使用ADO.NET数据提供者:

import System.Data.SqlClient.*
NET.addAssembly('System.Data');
conn = SqlConnection('Data Source=<HOST>;Initial Catalog=<DB>');
conn.Open();
q = SqlCommand('select * from <TABLE>', conn);
r = q.ExecuteReader();
while r.Read()
    char(r.GetString(0))
end
r.Close()
conn.Close()
Run Code Online (Sandbox Code Playgroud)