问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

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

发布网友 发布时间:2022-04-12 14:55

我来回答

3个回答

热心网友 时间:2022-04-12 16:25

// 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(iter;iter!=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;
}

热心网友 时间:2022-04-12 17:43

(楼上两位说的很对,我给你粘一篇文章吧 初学者 看看有好处。
需要的话 你可以留下邮箱 我这有一些初学者的文档可以发给你很不错,希望继续努力。面试,到时候一切都是是浮云。。。哈哈)

基本流程
万事开头难,任何一种新技术对于初学者来说最重要的还是“入门”,掌握其要点。让我们来看看ADO数据库开发的基本流程吧!
(1)初始化COM库,引入ADO库定义文件
(2)用Connection对象连接数据库
(3)利用建立好的连接,通过Connection、Command对象执行SQL命令,或利用Recordset对象取得结果记录集进行查询、处理。
(4)使用完毕后关闭连接释放对象。

准备工作:
为了大家都能测试本文提供的例子,我们采用Access数据库,您也可以直接在我们提供的示例代码中找到这个test.mdb。
下面我们将详细介绍上述步骤并给出相关代码。
【1】COM库的初始化
我们可以使用AfxOleInit()来初始化COM库,这项工作通常在CWinApp::InitInstance()的重载函数中完成,请看如下代码:

BOOL CADOTest1App::InitInstance()
{
AfxOleInit();
......

【2】用#import指令引入ADO类型库
我们在stdafx.h中加入如下语句:(stdafx.h这个文件哪里可以找到?你可以在FileView中的Header Files里找到)

#import "c:\program files\common files\system\ado\msado15.dll" no_namespace rename("EOF","adoEOF")
这一语句有何作用呢?其最终作用同我们熟悉的#include类似,编译的时候系统会为我们生成msado15.tlh,ado15.tli两个C++头文件来定义ADO库。

几点说明:
(1) 您的环境中msado15.dll不一定在这个目录下,请按实际情况修改
(2) 在编译的时候肯能会出现如下警告,对此微软在MSDN中作了说明,并建议我们不要理会这个警告。
msado15.tlh(405) : warning C4146: unary minus operator applied to unsigned type, result still unsigned

【3】创建Connection对象并连接数据库
首先我们需要添加一个指向Connection对象的指针:
_ConnectionPtr m_pConnection;
下面的代码演示了如何创建Connection对象实例及如何连接数据库并进行异常捕捉。

BOOL CADOTest1Dlg::OnInitDialog()
{
CDialog::OnInitDialog();
HRESULT hr;
try
{
hr = m_pConnection.CreateInstance("ADODB.Connection");///创建Connection对象
if(SUCCEEDED(hr))
{
hr = m_pConnection- >Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=test.mdb","","",adModeUnknown);///连接数据库
///上面一句中连接字串中的Provider是针对ACCESS2000环境的,对于ACCESS97,需要改为:Provider=Microsoft.Jet.OLEDB.3.51;
}
}
catch(_com_error e)///捕捉异常
{
CString errormessage;
errormessage.Format("连接数据库失败!\r\n错误信息:%s",e.ErrorMessage());
AfxMessageBox(errormessage);///显示错误信息
}

在这段代码中我们是通过Connection对象的Open方法来进行连接数据库的,下面是该方法的原型
HRESULT Connection15::Open ( _bstr_t ConnectionString, _bstr_t UserID, _bstr_t Password, long Options )
ConnectionString为连接字串,UserID是用户名, Password是登陆密码,Options是连接选项,用于指定Connection对象对数据的更新许可权,
Options可以是如下几个常量:
adModeUnknown:缺省。当前的许可权未设置
adModeRead:只读
adModeWrite:只写
adModeReadWrite:可以读写
adModeShareDenyRead:阻止其它Connection对象以读权限打开连接
adModeShareDenyWrite:阻止其它Connection对象以写权限打开连接
adModeShareExclusive:阻止其它Connection对象以读写权限打开连接
adModeShareDenyNone:阻止其它Connection对象以任何权限打开连接

我们给出一些常用的连接方式供大家参考:
(1)通过JET数据库引擎对ACCESS2000数据库的连接

m_pConnection- >Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\test.mdb","","",adModeUnknown);

(2)通过DSN数据源对任何支持ODBC的数据库进行连接:

m_pConnection- >Open("Data Source=adotest;UID=sa;PWD=;","","",adModeUnknown);

(3)不通过DSN对SQL SERVER数据库进行连接:
m_pConnection- >Open("driver={SQL Server};Server=127.0.0.1;DATABASE=vckbase;UID=sa;PWD=139","","",adModeUnknown);

其中Server是SQL服务器的名称,DATABASE是库的名称

Connection对象除Open方法外还有许多方法,我们先介绍Connection对象中两个有用的属性ConnectionTimeOut与State
ConnectionTimeOut用来设置连接的超时时间,需要在Open之前调用,例如:
m_pConnection- >ConnectionTimeout = 5;///设置超时时间为5秒
m_pConnection- >Open("Data Source=adotest;","","",adModeUnknown);

State属性指明当前Connection对象的状态,0表示关闭,1表示已经打开,我们可以通过读取这个属性来作相应的处理,例如:

if(m_pConnection- >State)
m_pConnection- >Close(); ///如果已经打开了连接则关闭它

------------------------------------------------------------------------------------
呵呵,是啊,我以前不做VC的,所以这次老板有个项目要做,没办法啊!!以后多请教啊!!
------------------------------------------------------------------------------------
你现在不少基础的不会,上来就连接数据库有点难
------------------------------------------------------------------------------------
要是你用vc6,就右健点击要添加变量的控件,选择classwizard,选择member variables选项卡,它会自动指到你想要添加变量的控件,你直接点选择add variable,起个名字就可以了
------------------------------------------------------------------------------------
我关键是不知道怎么给控件添加与之相对应的变量!!请明示啊!!
------------------------------------------------------------------------------------
CBaseEditBox是什么东西?你不要这样定义。应该先把控件放在对话框窗体上,再给这个控件添加与之相对应的变量,这样,VC就自动把控件和变量联系起来了
------------------------------------------------------------------------------------
刚弄,不怎么会,请明示!!!

我想把从数据库中读出来的记录放在一个文本框中!

然后在界面上放置了一个edit box

我在类C***Dlg中添加了变量
public:
CBaseEditBox m_list

接下来我在一个按钮的onOK事件里连接数据库并想把得到的记录放到m_list里

// 读入库中各字段并加入列表框中
while(!m_pRecordset- >adoEOF)
{
var = m_pRecordset- >GetCollect("UserName");
if(var.vt != VT_NULL)
strName = (LPCSTR)_bstr_t(var);
var = m_pRecordset- >GetCollect("Password");
if(var.vt != VT_NULL)
strAge = (LPCSTR)_bstr_t(var);

m_list.AddString( strName + " -- > "+strAge );

m_pRecordset- >MoveNext();
}

// 默认列表指向第一项,同时移动记录指针并显示
m_list.SetCurSel(0);

然后一大堆错误:
d:\microsoft visual studio\myprojects\testado\testadodlg.h(18) : error C2146: syntax error : missing "; " before identifier "m_list "
d:\microsoft visual studio\myprojects\testado\testadodlg.h(18) : error C2501: "CBaseEditBox " : missing storage-class or type specifiers
d:\microsoft visual studio\myprojects\testado\testadodlg.h(18) : error C2501: "m_list " : missing storage-class or type specifiers
TestADODlg.cpp
d:\microsoft visual studio\myprojects\testado\testadodlg.h(18) : error C2146: syntax error : missing "; " before identifier "m_list "
d:\microsoft visual studio\myprojects\testado\testadodlg.h(18) : error C2501: "CBaseEditBox " : missing storage-class or type specifiers
d:\microsoft visual studio\myprojects\testado\testadodlg.h(18) : error C2501: "m_list " : missing storage-class or type specifiers
D:\Microsoft Visual Studio\MyProjects\TestADO\TestADODlg.cpp(195) : error C2065: "m_list " : undeclared identifier
D:\Microsoft Visual Studio\MyProjects\TestADO\TestADODlg.cpp(195) : error C2228: left of ".AddString " must have class/struct/union type
D:\Microsoft Visual Studio\MyProjects\TestADO\TestADODlg.cpp(201) : error C2228: left of ".SetCurSel " must have class/struct/union type
Generating Code...
Error executing cl.exe.

请问什么原因那?

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

把文章中连接Access的语句换成:
连接SQL数据库:
m_pConnection- >Open("Provider=SQLOLEDB.1;Server=192.168.1.6;DATABASE=mysql;UID=sa;PWD=;","","",adModeUnknown);

其中Server是SQL服务器的名称,DATABASE是库的名称
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
泰勒公式有哪些常见形式? 空调室内风机怎样工作 什么是县级以上医院 关于聚金宝 买白银问题 平安银行个人贵金属交易业务有哪些? 网易云音乐为什么歌这么少? 公路边种的有什么花 高速路上常用的绿化花卉有那些? 公路绿化用什么花 我一键开核后顺利进入WIN7 系统,可是一开网站就重启是怎么回事,我开6... 请问爱情数字95.16的含义是什么意思 爱情数字09654是什么意思 车牌号096有什么喻意? 爱情数字9,6代表什么意思 算卦先生说我的幸运数字096,这是什么意思? 一个系统中能否ms access2000与ms sql 2000并存 vivox21手机玻璃后壳自己更换是买一个玻璃后壳还是买中框一体的 C,华为荣耀的X,A系列有什么区别 iqooneo5锁屏上的号码是什么 iqooneo3的sn码是 y198TJ900A00都代表什么? iqooneo5滑动密码大全 iQOO Neo 855原来热点的密码是什么? iqooneo5呼叫限制密码 在找靓机上买vivo iQOO Neo需要注意什么? 梦见自己的妈妈爱人和朋友自己同时掉下悬崖? 求助解梦:梦见弟弟掉下悬崖 梦见亲人从很高的悬崖摔下去,但没死 梦见下雪和亲人一起玩 昨晚做梦能见下大雪,有什么寓意? 谁会解梦啊???梦见下了厚厚的大雪,和爱人一起去亲戚家! 橡皮筋有什么妙用? 尊享贷是否可以关闭自动扣款? 橡皮筋都可以用来干什么? 招商GQ联名信用卡年费是多少 橡皮筋是用来干什么的.? 老板的小孩在我旁边做作业,拿过来问我,上面的题目为:说说橡皮筋的100种用途? 我脑袋 招行GQ卡网购6次以上能免次年年费吗?M+卡不激活会收取费用吗? 大量橡皮筋可以用来干嘛 橡皮筋除了能扎头发还能干什么? 用橡皮筋能做什么科技作品 电脑保存后的文件怎么愎复原样? 如何用长橡皮筋做一个好玩的东西 如何用橡皮筋做一个测力计 橡皮筋线可以做什么 word2003修改了文件保存了之后,还是可以撤销修改的步骤,这是为什么? WORD文档,原先是正确的文件在里面,后来不小心改了,然后点击了保存,要怎么样才能返回到原来的文件? 信用卡实在没钱还,最多逾期多久? 浦发银行信用卡5千最多逾期 vb 6.0 access2000 我想问一下,信用卡最多可以逾期几天