| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 493 人关注过本帖
标题:各位大虾,本人菜鸟,帮我找找这个错误吧,是关于VC连接SQL Server数据库的
只看楼主 加入收藏
qianyou
Rank: 3Rank: 3
来 自:江西南昌
等 级:论坛游侠
帖 子:76
专家分:189
注 册:2011-3-25
结帖率:100%
收藏
 问题点数:0 回复次数:1 
各位大虾,本人菜鸟,帮我找找这个错误吧,是关于VC连接SQL Server数据库的
程序是弄出来了,但是运行的时候总是有异常。
程序代码:
#include "StdAfx.h"
#include "ADOConn.h"
#include <iostream>
using namespace std;
void    ADOConn::OnInitADOConn()
{
    ::CoInitialize(NULL);  //初始化OLE/COM环境,为访问ADO接口做准备
    HRESULT    hr;
    try
    {
        hr = m_pConnection.CreateInstance("ADO.Connection");    //创建Connection对象
        _bstr_t strConnection="driver={sql server};server=(local);uid=sa;pwd=123;database=shopping";
        hr = m_pConnection->Open(strConnection,"","",adModeUnknown);
        if(SUCCEEDED(hr))
        {
            cout<<"成功连接数据库"<<endl;
        }
    }
    catch(_com_error e)            //捕捉异常
    {
        cout<<"连接数据库失败"<<endl;
    }
}

_RecordsetPtr    &    ADOConn::GetRecordSet(_bstr_t    bstrSQL)
{
    try
    {
        //连接数据库,如果Connection对象为空,重新连接数据库
        if(m_pConnection == NULL)
            OnInitADOConn();
        //创建记录集对象
        m_pRecordset.CreateInstance(_uuidof(Recordset));
        m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
    }
    catch(_com_error e)
    {
        cout<<e.Description()<<endl;
    }
    //返回记录集
    return    m_pRecordset;
}

bool    ADOConn::ExecuteSQL(_bstr_t bstrSQL)
{
    try
    {
        //是否已经连接数据库
        if(m_pConnection == NULL)
            OnInitADOConn();
        m_pConnection->Execute(bstrSQL,NULL,adCmdText);
        return    true;
    }
    catch(_com_error e)
    {
        cout<<e.Description()<<endl;
        return false;
    }
}

void    ADOConn::ExitConnection()
{
    //关闭记录集和连接
    if(m_pRecordset != NULL)
        m_pRecordset->Close();
    m_pConnection->Close();
    //释放环境
        ::CoInitialize(NULL);        //关闭ole/com库,释放资源
}

这是我自己添加的连接SQL Server的类,在下面的主函数中进行调用
程序代码:
#include "stdafx.h"
#include "ADOConn.h"
#include <iostream>
using namespace std;
int main()
{
    ADOConn ado;
    _bstr_t    bstrSQL;
    //ado.AdoConn();
    ado.OnInitADOConn();
    //ado.GetRecordSet(bstrSQL);
    //ado.ExecuteSQL(bstrSQL);
    //ADOConn    ExitConnection();
    return 0;
}

请各位大虾多多指点啊,整了两天,人都烦死了
搜索更多相关主题的帖子: 数据库 
2012-10-24 11:53
qianyou
Rank: 3Rank: 3
来 自:江西南昌
等 级:论坛游侠
帖 子:76
专家分:189
注 册:2011-3-25
收藏
得分:0 
问题终于解决了,代码再重新贴一遍
ADOConn.h
程序代码:
#ifndef _ADOConn_H_
#define _ADOConn_H_
#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF")// rename("EOF",)
#pragma once
class ADOConn
{
public:
    //ADOConn(void);
    //~ADOConn(void);
    ::_ConnectionPtr    m_pConnection;
    ::_RecordsetPtr        m_pRecordset;
public:
    //初始化连接数据库
    void OnInitADOConn();
    //执行查询,返回结果集
    ::_RecordsetPtr &    GetRecordSet(_bstr_t bstrSQL);
    //执行sql语句,更新数据库
    bool    ExecuteSQL(_bstr_t bstrSQL);
    void    ExitConnection();
};
#endif

ADOConn.cpp
程序代码:
#include "StdAfx.h"
#include "ADOConn.h"
#include <iostream>
using namespace std;
void    ADOConn::OnInitADOConn()
{
    ::CoInitialize(NULL);  //初始化OLE/COM环境,为访问ADO接口做准备
    //HRESULT    hr;
    
//发生链接错误 
    try
    {
        HRESULT    hr = m_pConnection.CreateInstance(__uuidof(Connection));    //创建Connection对象
        _bstr_t strConnection="Provider=SQLOLEDB;Persist Security Info=false/*是否window身份验证*/;Initial Catalog=shopping/*数据库名*/;Data Source=127.0.0.1/*IP地址*/";
        m_pConnection->Open(strConnection,"sa/*这里写用户名*/","123/*密码*/",adModeUnknown);
        if(SUCCEEDED(hr))
        {
            cout<<"成功连接数据库"<<endl;
        }
    }
    catch(_com_error e)            //捕捉异常
    {
        cout<<e.Description()<<"连接数据库失败"<<endl;
        //
    }
}

_RecordsetPtr    &    ADOConn::GetRecordSet(_bstr_t    bstrSQL)
{
    try
    {
        //连接数据库,如果Connection对象为空,重新连接数据库
        if(m_pConnection == NULL)
            OnInitADOConn();
        //创建记录集对象
        m_pRecordset.CreateInstance(_uuidof(Recordset));
        m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
    }
    catch(_com_error e)
    {
        cout<<e.Description()<<endl;
    }
    //返回记录集
    return    m_pRecordset;
}

bool    ADOConn::ExecuteSQL(_bstr_t bstrSQL)
{
    try
    {
        //是否已经连接数据库
        if(m_pConnection == NULL)
            OnInitADOConn();
        m_pConnection->Execute(bstrSQL,NULL,adCmdText);
        return    true;
    }
    catch(_com_error e)
    {
        cout<<e.Description()<<endl;
        return false;
    }
}

void    ADOConn::ExitConnection()
{
    //关闭记录集和连接
    if(m_pRecordset != NULL)
        m_pRecordset->Close();
    m_pConnection->Close();
    //释放环境
        ::CoInitialize(NULL);        //关闭ole/com库,释放资源
}

ADOTest.cpp
程序代码:
// ADOTest.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "ADOConn.h"
#include <iostream>
using namespace std;

void main()
{
    ADOConn ado;
    _bstr_t    bstrSQL;
    ado.OnInitADOConn();
    return;
    ado.GetRecordSet(bstrSQL);
    ado.ExecuteSQL(bstrSQL);
    ado.ExitConnection();
}
2012-10-24 16:39
快速回复:各位大虾,本人菜鸟,帮我找找这个错误吧,是关于VC连接SQL Server数据 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.033406 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved