重装系统win7 64bit后,再安装sql server 2008R2 64位及matlabR2012a 64位后,在odbc中配置成功,但在matlab下对数据访问时出错,具体如下:
matlab 语句:conn=database(sourceName,'sa',key);
1、当三个参数均与odbc配置一致,此时提示错误为:
Message: '[Microsoft][ODBC 驱动程序管理器] 无效的字符串或缓冲区长度'
2、当sourceName故意更改后,提示错误为:
Message: '[Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序'
3、当密码key故意更改后,提示错误为:
Message: '[Microsoft][ODBC SQL Server Driver][SQL Server]用户 'sa' 登录失败。'以上综合说明,matla与odbc的接口连接没问题,但odbc配置成功了,说明其与sql sever连接貌似也没问题,
但为啥最终仍然无法连接成功啊难道大家没有遇到类似的问题么?有高手没~~
以上在32位系统下均没问题
matlab 语句:conn=database(sourceName,'sa',key);
1、当三个参数均与odbc配置一致,此时提示错误为:
Message: '[Microsoft][ODBC 驱动程序管理器] 无效的字符串或缓冲区长度'
2、当sourceName故意更改后,提示错误为:
Message: '[Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序'
3、当密码key故意更改后,提示错误为:
Message: '[Microsoft][ODBC SQL Server Driver][SQL Server]用户 'sa' 登录失败。'以上综合说明,matla与odbc的接口连接没问题,但odbc配置成功了,说明其与sql sever连接貌似也没问题,
但为啥最终仍然无法连接成功啊难道大家没有遇到类似的问题么?有高手没~~
以上在32位系统下均没问题
网上有人提出过类似的问题,如:发表于 2011-4-14 13:47:25 |只看该作者 |倒序浏览 请教专家:
在用matlab取SQL server的数据时报错:[Microsoft][ODBC 驱动程序管理器] 无效的字符串或缓冲区长度 Please verify that login information and database url are valid.
我装的matlab版本是2010b(64位),32位没有这个问题,我的操作系统和SQL都是64位的,AccessDatabaseEngine装了64位的也没解决问题,请问各位专家这是什么原因,非常感谢!
具体见:http://www.ilovematlab.cn/thread-122054-1-1.html
但貌似都没人回答啊
(ODBC方法略,只针对JDBC方法)
Matlab通过JDBC连接SQL Server
上一篇写的是通过ODBC连接SQL Server,那种方法存在两大问题,
第一是速度慢,因为Matlab需要用一个叫做JDBC/ODBC Bridge的东西作为桥梁间接地连接ODBC数据库,因此速度肯定比JDBC要慢。如果说慢一点可以容忍的话,那么第二个问题可就忍无可忍了。那就是64位Matlab无法通过ODBC接口访问SQL Server--因为这个悲剧,我还不得不新安装一个32位的Matlab!
既然ODBC那么不爽,我们可以跳出ODBC,而直接使用JDBC来访问数据库。
第一步,从Microsoft.COM 下载Microsoft SQL Server JDBC Driver 3.0,下载地址可以将上述关键字扔进Google中搜索就得到了。解压缩可以得到很多文件,我们需要的是其中的sqljdbc4.jar和sqljdbc.jar这两个文件。
其中后者是前者的子集,只要不出问题,直接使用前者就可以了。
第二步,在Matlab中加入jar。具体做法是找到"classpath.txt"文件,例如我的这个文件位置是 "D:\Matlab2010B\toolbox\local\classpath.txt",在文件的最后加入sqljdbc4.jar的完整路径,例如我的是: "D:/sqljdbc30/enu/sqljdbc4.jar",注意斜杠怎么写。
第三步,启动Matlab,启动过程中如果没有出错,那么这个JDBC Connector就可以用了。
上面三步就把JDBC Connector建好了。接下来我们就开始连接数据库。
第一步,建立一个到数据库的连接。假设SQL Server地址是 192.30.1.117, 端口是 1433, 数据库名称是RTQ,用户名user,密码 pwd,那么用下面的语句建立一个到该数据库的连接。
conn=database('RTQ','user','pwd','com.microsoft.sqlserver.jdbc.SQLServerDriver',...
'jdbc:sqlserver://192.30.1.117:1433;databaseName=RTQ');
第二步,建立一个查询,假设我们想获得名叫 tbl 的table中的所有顺序,那么可以用:
curs=exec(conn,'select * from tbl');
第三步,获取数据
curs=fetch(curs);
获取的数据就储存在 curs.Data 中。如果我们想将其保存到xls文件中,可以使用
xlswrite('data.xls',curs.Data);
依据测试,在我的Win 7 Professional x64, Matlab 2010B x64 系统上成功获取了数据,但是速度测试不太好做,因为可能与数据库本身的速度有关。我从三个数据库分别下载70万行左右的数据,使用时间在10到25秒不等。
在Matlab用JDBC驱动连接SQL Server 2008(其他仅连接符url和driver不同)
%在运行此段代码前先确保配置好了JDBC驱动,方法如下:
%1.Microsoft官网下载sqljdbc3.0驱动——Microsoft SQL Server JDBC Driver 2.0.exe(4M左右)
%2.解压后能看到sqljdbc4.jar和sqljdbc.jar文件,针对电脑上JDK的版本选择导入文件,如JDK6.0导入sqljdbc4.jar
%3.在command windows中输入:edit classpath.txt 打开路径配置文件 在文件最后一行添加sqljdbc4.jar的完整路径,
%(不能同时加载sqljdbc4.jar和sqljdbc.jar的路径,否则不能正常连接数据库)。
%4.在SQL Server中新建一个登录名godman,并设置密码为godman
%5.采用如下代码在Matlab中连接SQL Server 2008
%Godman 2010.12.20 [email protected]
代码如下:
clear;close all
%url
databaseurl='jdbc:sqlserver://localhost:1433;';
%driver
driver='com.microsoft.sqlserver.jdbc.SQLServerDriver';
username='godman'; %登录名
password='godman'; %密码
databasename='Test'; %数据源名称
conn = database(databasename,username,password,driver,databaseurl)tic
curs=exec(conn,'select * from 处理前数据')
curs=fetch(curs); %将SQL执行结果返回到MATLAB工作空间
data=curs.Data; %得到SQL执行结果中的数据
toc
close(curs); %关闭游标对象
close(conn); %关闭数据库连接对象
%%===============================以上结束需要说明的是,实例中:databaseurl='jdbc:sqlserver://localhost:1433;
应该改为:databaseurl='jdbc:sqlserver://localhost:1433;databaseName=Test';
否则,最后连接的数据库不是Test,而是系统数据库(猜测的),且上句的数据库名字应该与之前指定的数据源一致才行。以上已经在win7,sql server 2008 R2,2012a(三者均是64位)的平台上测试成功,
希望对其他同学有所帮助
Undefined function or method 'fetch' for input arguments of type 'struct'.
ODBC 设置成功。
我用VB6 写的软件在其他XP, WIN7 32 的机器上运行完全没问题。但是WIN7 64 就出错。请大牛指点我的连接是这样的strConnect = "Provider=SQLOLEDB.1" _
& ";User ID=" & id & "" _
& ";Password=" & pass & "" _
& ";Initial Catalog=" & cata & "" _
& ";Data Source=" & Source & ""
突然, 就出了这个错误。
我认为是某个设置被改了。现在不知道是哪里需要改。
求救下楼主,我的是在2008b的matlab,sql2008,win764的平台下,为什么出现句柄获取不到的问题。
conna =
Instance: 'zjhddata2'
UserName: 'USER-20140710UM\Administrator'
Driver: []
URL: []
Constructor: [1x1 com.mathworks.toolbox.database.databaseConnect]
Message: [1x154 char]
Handle: 0
TimeOut: []
AutoCommit: 'off'
Type: 'Database Object'
能不能加好友,请教下。
Matlab 2013a 出现错误---[Microsoft][ODBC 驱动程序管理器] 无效的字符串或缓冲区长度
解决方法:2个都安装(貌似现在编译dll 只能用2013a)
高价收药、收药、北京收药:
http://www.woshouyao.com/index.php