VS2013C++ADO连接自带SQLServer本地数据库,多步OLEDB操作错误

VS2013连接自带SQLServer本地数据库,工具-连接服务器或者连接数据库都能成功,但是在运行的时候ADO连接总是提示“多步OLEDB操作错误”(异常的描述信息)。
连接数据库代码

 void  ADOConn::InitADOConn()
{
    if (m_pConnection)
    {
        return;
    }

    // 初始化OLE/COM库环境 
    ::CoInitialize(NULL);

    try
    {
        //m_pConnection.CreateInstance("ADODB.Connection");
        m_pConnection.CreateInstance(__uuidof(Connection));
        m_pConnection->Open(
            "Data Source=(LocalDB)\\v11.0; \
            AttachDbFilename=C:\\Users\\VisualMemory\\Documents\\Feature.mdf; \
            Integrated Security=True;Connect Timeout=30", 
            "", "", adModeUnknown);
    }
    catch (_com_error e)
    {
        AfxMessageBox(e.Description());
    }
}

连接字符串是在数据库属性里获取的。
仅仅执行一下代码就会报错“多步OLEDB操作错误”

        adoConn.InitADOConn();
        if (adoConn.m_pConnection)
        {
            AfxMessageBox(_T("数据库已连接"));
        }
        else
        {
            AfxMessageBox(_T("数据库未连接"));
            return false;
        }

然后关闭连接的时候也会报错:对象关闭时,不允许操作
退出连接的代码是:

 // 退出连接
void ADOConn::ExitConnect()
{
    try
    {
        // 关闭记录集和连接
        if (m_pRecordset != NULL)
        {
            m_pRecordset->Close();
            m_pRecordset = NULL;
        }
        if (m_pConnection != NULL)
        {
            m_pConnection->Close();
            m_pConnection = NULL;
        }
        // 释放环境
        ::CoUninitialize();
    }
    catch (_com_error e)
    {
        AfxMessageBox(e.Description());
    }
}

数据库只有一个表,这是表里的代码:

 CREATE TABLE [dbo].[Features] (
    [Id] INT NOT NULL,
    PRIMARY KEY CLUSTERED ([Id] ASC)
);

我现在认为错误可能是以下其中的一点:
1. 环境不对,但是在编码的时候都能连接成功,也能打开数据库。我也不知道怎么看数据库的配置是否正确,请各位大神和我说一下。(之前安装VS只装了和C++相关的模块,之后又修改,安装了其他的,并且出现问题之后也把VS修复好几次,还是不行)
2. 连接字符串错误,但是我是从属性里获取的,\也做了转义,还是报错。

所以现在很迷糊,上网查了很多资料,也找不到解决办法。

请各位大神不惜指出错误,谢谢啦!

4个回答

问题已解决,待我回到住的地方再把详细的解决方法贴出来吧。不过,用VS里的服务资源管理器和SQL对象浏览器点击数据库属性,获取的连接字符串还是不行。

qq_26849023
qq_26849023 一样的问题、怎么破 到网上找了各种解决方法了 也换了字符串了
3 个月之前 回复
visualmemory
visualmemory 回复番薯愛地瓜: 如果你用的是SQL SERVER LOCALDB,建议你连接版本自带的自动实例。时间太久了,确实忘了。。。
接近 5 年之前 回复
visualmemory
visualmemory 回复番薯愛地瓜: 晚上回去我再看看吧,时间太久了忘了。。。
接近 5 年之前 回复
jack_zeng12
番薯愛地瓜 楼主,我也快搞了两天了,能不能告诉我你的事什么问题啊
接近 5 年之前 回复
jack_zeng12
番薯愛地瓜 楼主,我也快搞了两天了,能不能告诉我你的事什么问题啊
接近 5 年之前 回复
visualmemory
visualmemory 连接的是SQLSERVERExpress LocalDB。等有时间再写吧,问题可以参考MSDN,连接:https://msdn.microsoft.com/zh-cn/library/hh234692(v=SQL.110)
5 年多之前 回复

附加:
我之前安装过VS2012,之后又卸载了,再装的VS2013。现在打开C:\Program Files\Microsoft SQL Server\110\LocalDB\Binn下的sqlserver.exe提示:Your SQL Server installation is either corrupt or has been tampered with (Error getting instance ID from name.). Please uninstall then re-run setup to correct this problem"错误。

是vs没有卸载干净,遗留了垃圾吧。

哥,我也也到了类似的问题,能不能把你的解决方法贴出来啊

u014685381
你的温柔只能给我 看一下
3 年多之前 回复
visualmemory
visualmemory 时间太久了,我忘了,好像是连接字符串的问题。连接上localDB的自动实例就好了。管道的名称话每次启动服务都会变化的
接近 5 年之前 回复
visualmemory
visualmemory 时间太久了,我忘了,好像是连接字符串的问题。连接上localDB的自动实例就好了。管道的名称话每次启动服务都会变化的
接近 5 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问