求问C++怎么连接SQL server啊

求问C++怎么连接SQL server啊,第1张

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

//

 

#include "stdafx.h"

#include "iostream"  

#include "string"  

#include "vector"  

//步骤1:添加对ADO的支持

#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF")  

using namespace std

 

int _tmain(int argc, _TCHAR* argv[])

{

    CoInitialize(NULL) //初始化COM环境           

    _ConnectionPtr pMyConnect(__uuidof(Connection))//定义连接对象并实例化对象 

    _RecordsetPtr pRst(__uuidof(Recordset))//定义记录集对象并实例化对象               

    try           

    {              

        //步骤2:创建数据源连接

        /*打开数据库“SQLServer”,这里需要根据自己PC的数据库的情况 */             

        pMyConnect->Open("Provider=SQLOLEDB Server=.Database=AIS2 uid=sa pwd=","","",adModeUnknown)           

    } 

    catch (_com_error &e)           

    {               

         cout<<"Initiate failed!"<<endl               

         cout<<e.Description()<<endl               

         cout<<e.HelpFile()<<endl               

         return 0           

    }           

    cout<<"Connect succeed!"<<endl                 

      

    //步骤3:对数据源中的数据库/表进行 *** 作

    try           

    {

        pRst = pMyConnect->Execute("select * from gendat",NULL,adCmdText)//执行SQL: select * from gendat          

        if(!pRst->BOF) 

        {

            pRst->MoveFirst() 

        }               

        else

        {                    

            cout<<"Data is empty!"<<endl                     

            return 0                

        }               

        vector<_bstr_t> column_name      

          

        /*存储表的所有列名,显示表的列名*/               

        for(int i=0 i< pRst->Fields->GetCount()i++)               

        {                    

            cout<<pRst->Fields->GetItem(_variant_t((long)i))->Name<<" "                    

            column_name.push_back(pRst->Fields->GetItem(_variant_t((long)i))->Name)               

        }   

        cout<<endl

          

        /*对表进行遍历访问,显示表中每一行的内容*/               

        while(!pRst->adoEOF)               

        {                    

            vector<_bstr_t>::iterator iter=column_name.begin()                    

            for(iteriter!=column_name.end()iter++)                    

            {                         

                if(pRst->GetCollect(*iter).vt !=VT_NULL)                         

                {  

                    cout<<(_bstr_t)pRst->GetCollect(*iter)<<" "                         

                }                         

                else

                {

                    cout<<"NULL"<<endl  

                }                  

            }

            pRst->MoveNext()                   

            cout<<endl              

        }           

    }

    catch(_com_error &e)           

    {               

        cout<<e.Description()<<endl               

        cout<<e.HelpFile()<<endl               

        return 0          

    }  

 

    //步骤4:关闭数据源

    /*关闭数据库并释放指针*/        

    try           

    {               

        pRst->Close()     //关闭记录集               

        pMyConnect->Close()//关闭数据库               

        pRst.Release()//释放记录集对象指针               

        pMyConnect.Release()//释放连接对象指针

    }

    catch(_com_error &e)           

    {               

        cout<<e.Description()<<endl               

        cout<<e.HelpFile()<<endl               

        return 0           

    }                  

    CoUninitialize() //释放COM环境

    return 0

}

(1).在文件stdafx.h中最后一个#endif的前一行写入

#import

"C:\program

files\common

files\System\ado\msado15.dll"

no_namespace

\

rename("EOF","EndOfFile")

\

rename("LockTypeEnum","newLockTypeEnum")

\

rename("DataTypeEnum","newDataTypeEnum")

\

rename("FieldAttributeEnum","newFieldAttributeEnum")

\

rename("EditModeEnum","newEditModeEnum")

\

rename("RecordStatusEnum","newRecordStatusEnum")

\

rename("ParameterDirectionEnum","newParameterDirectionEnum")

如果你的系统不是安装在C盘的话就把#import

后面的C改成系统所有的盘

--------------------------------------------------------------------------

(2).在C***App类的public:下加入

_RecordsetPtr

m_pADOSet

bool

ADOExecute(_RecordsetPtr

&ADOSet,

_variant_t

&strSQL)

在private:下加入

private:

_ConnectionPtr

ADOConn

--------------------------------------------------------------------------

在class

C***App

:

public

CWinApp

{

...

}之后#endif之前加入

extern

CxxxApp

theApp

--------------------------------------------------------------------------

(3)在BOOL

C***App::InitInstance()函数中Enable3dControls()

//

Call

this

when

linking

to

MFC

statically这一行下面加入

if(

FAILED(::CoInitialize(NULL))

)

{

AfxMessageBox("ADO

Init

failed")

return

false

}

try

{

ADOConn.CreateInstance(__uuidof(Connection))

ADOConn->Open("DSN=OBDC数据源Provider=MSDASQL","用户","密码",

adConnectUnspecified)//这一行要自已修改

}

catch(_com_error

&e)

{

CString

err

err.Format("%s",

(char*)(e.Description())

)

AfxMessageBox(err)

}

catch(...)

{

AfxMessageBox("Unknown

Error...")

}

m_pADOSet.CreateInstance(__uuidof(Recordset))

-------------------------------------------------------------------------

并在文件最后加上如下代码:

bool

CxxxApp::ADOExecute(_RecordsetPtr

&ADOSet,

_variant_t

&strSQL)

{

if

(

ADOSet->State

==

adStateOpen)

ADOSet->Close()

try

{

ADOSet->Open(strSQL,

ADOConn.GetInterfacePtr(),

adOpenStatic,

adLockOptimistic,

adCmdUnknown)

return

true

}

catch(_com_error

&e)

{

CString

err

err.Format("ADO

Error:

%s",(char*)e.Description())

AfxMessageBox(err)

return

false

}

}

------------------------------------------------------------------------

最后就可以在登录时执行SQL语句了,比如用户为CString

strUser,

密码是CString

strPwd数据库表是user_table(user_id,

user_name,

user_pwd)则

_variant_t

sqlQuery

sqlQuery

=

"select

*

from

user_table

where

user_name='"+strUser

+"'

and

user_pwd='"+

strPwd

+"'"

theApp.ADOExecute(theApp.m_pADOSet,

sqlQuery

)

int

iCount

=

theApp.m_pADOSet->GetRecordCount()

if

(

0==iCount

)

{

AfxMessageBox(_T("密码错误"),

MB_ICONEXCLAMATION)

return

}

else

{

AfxMessageBox(_T("登录成功"),

MB_ICONEXCLAMATION)

不知道能否帮到你,参考下把


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9235817.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-26
下一篇 2023-04-26

发表评论

登录后才能评论

评论列表(0条)

保存