如何用VC++访问SQLserver数据库?

解决方案 »

  1.   

    http://www.vckbase.com/document/viewdoc/?id=307
      

  2.   

    1. 可以使用MFC提供的CDatabase、CRecordset等类库;
    2. 可以使用ATL提供的CSession、CCommand等类库,基于OLEDB Consumer技术;
      

  3.   

    最好用ADO,简单,不容易出错。
      

  4.   

    ado odbc oledb 等等都可以
      

  5.   

    参考下面的方法,是连接ACCESS的,如果连接SQL SERVER,把连接字符串修改一下就行了。。
    http://www.vckbase.com/document/viewdoc/?id=1215
    http://www.vckbase.com/document/viewdoc/?id=610
    http://www.vckbase.com/document/viewdoc/?id=496
      

  6.   

    ado接口http://hi.baidu.com/flly1/blog/item/98819ed1aad902d7572c8418.html 
    http://www.cnblogs.com/cy163/archive/2007/03/29/693369.html 看完上面两篇文章应该就没问题了
    一篇理论,一篇例程
      

  7.   

    严重支持用ADO,下面的代码是一段访问Access的代码,修改一下连接字符串就可以访问Sql Server:
    // 初始化COM动态链接库
    ::CoInitialize(NULL); // 创建ADO连接对象和记录集对象
    _ConnectionPtr pConnection = NULL;
    _RecordsetPtr pRecordset = NULL;
    pConnection.CreateInstance(__uuidof(Connection));
    pRecordset.CreateInstance(__uuidof(Recordset)); // 获得当前应用程序的路径
    TCHAR szFileName[MAX_PATH]; 
    ::GetModuleFileName(AfxGetInstanceHandle(), szFileName, MAX_PATH);
    CString strPath = szFileName;
    strPath = strPath.Left(strPath.ReverseFind(TEXT('\\')) + 1); // 包含'\'字符 try
    {
    // 打开本地的Access数据库
    CString strConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + strPath + "test.mdb";

    pConnection->Open(strConnection.GetBuffer(200), "", "", adModeUnknown);
    strConnection.ReleaseBuffer(); // 访问Student表中所有的记录,并输出到屏幕上
    pRecordset->Open("Select * From Student Where [Age] > 19", pConnection.GetInterfacePtr(), adOpenDynamic, adLockOptimistic, adCmdText);
    pRecordset->MoveFirst();
    while (pRecordset->EndOfFile == VARIANT_FALSE)
    {
    // 第一个字段
    COleVariant vaHolder = pRecordset->GetCollect("Name");
    if (vaHolder.vt != VT_NULL)
    {
    CString strName = (LPCWSTR)_bstr_t(vaHolder);
    cout << strName.GetBuffer(50) << ", ";
    strName.ReleaseBuffer();
    }
    vaHolder.Clear(); // 第二个字段
    vaHolder = pRecordset->GetCollect("Age");
    if (vaHolder.vt != VT_NULL)
    {
    int age = (int)vaHolder.intVal;
    cout << age << endl;
    }
    vaHolder.Clear(); pRecordset->MoveNext();
    }
    pRecordset->Close();
    }
    catch (_com_error e)
    {
    AfxMessageBox(e.ErrorMessage());
    } // 关闭记录集和连接对象
    if (pRecordset->State)
    pRecordset->Close();
    if (pConnection->State)
    pConnection->Close(); // 关闭COM库的支持
    ::CoUninitialize();
      

  8.   

    ado,dao,odbc等 等 都可用 ,不过本人喜欢用ado,简单不难
      

  9.   

    比如这个例子:
    新建连接类如下(类名:ADOConn)
    // ADOConn.cpp: implementation of the ADOConn class.
    //
    //////////////////////////////////////////////////////////////////////#include "stdafx.h"
    #include "CheckManage.h"
    #include "ADOConn.h"#ifdef _DEBUG
    #undef THIS_FILE
    static char THIS_FILE[]=__FILE__;
    #define new DEBUG_NEW
    #endif//////////////////////////////////////////////////////////////////////
    // Construction/Destruction
    //////////////////////////////////////////////////////////////////////ADOConn::ADOConn()
    {}ADOConn::~ADOConn()
    {}// 初始化—连接数据库
    void ADOConn::OnInitADOConn()
    {
    // 初始化OLE/COM库环境 
    ::CoInitialize(NULL);

    try
    {
    // 创建Connection对象
    m_pConnection.CreateInstance("ADODB.Connection");
    // 设置连接字符串,必须是BSTR型或者_bstr_t类型
    _bstr_t strConnect = "Provider=SQLOLEDB.1; Server=127.0.0.1; Database=CheckManage;  uid=sa; Trusted_Connection=Yes";
    m_pConnection->Open(strConnect,"","",adModeUnknown);
    }
    // 捕捉异常
    catch(_com_error e)
    {
    // 显示错误信息
    AfxMessageBox(e.Description());
    }
    }// 执行查询
    _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)
    {
    // 显示错误信息
    AfxMessageBox(e.Description());
    }
    // 返回记录集
    return m_pRecordset;
    }// 执行SQL语句,Insert Update _variant_t
    BOOL ADOConn::ExecuteSQL(_bstr_t bstrSQL)
    {
    // _variant_t RecordsAffected;
    try
    {
    // 是否已经连接数据库
    if(m_pConnection == NULL)
    OnInitADOConn();
    // Connection对象的Execute方法:(_bstr_t CommandText, 
    // VARIANT * RecordsAffected, long Options ) 
    // 其中CommandText是命令字串,通常是SQL命令。
    // 参数RecordsAffected是操作完成后所影响的行数, 
    // 参数Options表示CommandText的类型:adCmdText-文本命令;adCmdTable-表名
    // adCmdProc-存储过程;adCmdUnknown-未知
    m_pConnection->Execute(bstrSQL,NULL,adCmdText);
    return true;
    }
    catch(_com_error e)
    {
    AfxMessageBox(e.Description());
    return false;
    }
    }// 断开连接
    void ADOConn::ExitConnect()
    {
    // 关闭记录集和连接
    if (m_pRecordset != NULL)
    m_pRecordset->Close();
    m_pConnection->Close();
    // 释放环境
    ::CoUninitialize();
    }再在ADOConn.h的头文件中加
    #import "c:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF") rename("BOF","adoBOF")
    并声明一下东西:
    // 定义变量
    public:
    //添加一个指向Connection对象的指针:
    _ConnectionPtr m_pConnection;
    //添加一个指向Recordset对象的指针:
    _RecordsetPtr m_pRecordset;

    // 定义方法
    public:
    ADOConn();
    virtual ~ADOConn();
    void OnInitADOConn(); // 初始化—连接数据库
    _RecordsetPtr& GetRecordSet(_bstr_t bstrSQL); // 执行查询
    BOOL ExecuteSQL(_bstr_t bstrSQL); // 执行SQL语句,Insert Update _variant_t
    void ExitConnect(); // 断开连接
      

  10.   

    ADO技术,和vc连接其它数据库类似
    图书馆找本书或摆渡一下就有答案