重装系统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位系统下均没问题

解决方案 »

  1.   

    谢谢,
    网上有人提出过类似的问题,如:发表于 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
    但貌似都没人回答啊
      

  2.   

    隔了两天,还是想把问题解决,因为32位机器内存太小了,大数据没法读,今天偶而搜到一遍文章《Matlab通过ODBC连接SQL Server两种方法:程序设计方法和图形界面设计方法》-作者 Godman,没猜错的话,应该是杭州的老朋友写的,之前向他请教过不少问题,且还请过吃过饭,在此一并谢过~具体解决方法转载如下:
    (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位)的平台上测试成功,
    希望对其他同学有所帮助
      

  3.   

    请教一下,我执行curs=fetch(curs);时的提示是这个,是什么原因呢?求助。
    Undefined function or method 'fetch' for input arguments of type 'struct'.
      

  4.   

    这个问题你要考虑一下是否少了架构名,比如我写了个函数叫A,直接调用会说不存在,然后我加了DBO.A调用就可以了
      

  5.   

    我有同样的问题:
    ODBC 设置成功。
    我用VB6 写的软件在其他XP, WIN7 32 的机器上运行完全没问题。但是WIN7 64 就出错。请大牛指点我的连接是这样的strConnect = "Provider=SQLOLEDB.1" _
    & ";User ID=" & id & "" _
    & ";Password=" & pass & "" _
    & ";Initial Catalog=" & cata & "" _
    & ";Data Source=" & Source & ""
      

  6.   

    还有: 这个软件在 这台win7 64 上,一开始是可以运行的。 
    突然, 就出了这个错误。
    我认为是某个设置被改了。现在不知道是哪里需要改。
      

  7.   

    运行另一个ODBC配置程序就能解决:http://blog.csdn.net/kzl623/article/details/6310385
      

  8.   


    求救下楼主,我的是在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'
    能不能加好友,请教下。
      

  9.   

    Matlab 2013b 轻松取到Handle
    Matlab 2013a   出现错误---[Microsoft][ODBC 驱动程序管理器] 无效的字符串或缓冲区长度
    解决方法:2个都安装(貌似现在编译dll 只能用2013a)
      

  10.   

    楼上的真搞笑~!--- 跟人签名 ----------------
    高价收药、收药、北京收药:
    http://www.woshouyao.com/index.php