VS2010连接SQL Server 2008操作与编程 (笔记)

https://blog.csdn.net/u010499449/article/details/42237887

 实现VS2010连接SQL Server 2008操作与编程,主要记录的是一个学习的过程。

   实现VS2010连接SQL Server 2008:逗逗飞的专栏

   实现VS2010连接SQL Server 2008代码:点击打开链接

   ADO的三个指针:


_ConnectionPtr:用于建立数据库的连接。
 _RecordsetPtr:它是专门为通过记录集操作数据库而设立的指针,通过该接口可以对数据库的表内的记录、字段等进行各种操作。
 _CommandPtr:提交的sql查询字符串指针
         目的:连接数据库,实现对数据库的连接,读取操作。结果如下所示:

     

          图:sql数据库

   

               图:VS2010运行结果

    

需要的头文件
#import "C://Program Files//Common Files//System//ado//msado15.dll" 
no_namespace rename("EOF","adoEOF")rename("BOF","adoBOF")


用到的三个变量
_ConnectionPtr m_pConnection; // 数据库
_RecordsetPtr m_pRecordset; // 命令
_CommandPtr m_pCommand; // 记录
连接数据库
    void CtestDlg::OnBnClickedConnect()
{
    // TODO: 在此添加控件通知处理程序代码
 
    ::CoInitialize(NULL);   //初始化OLE/COM库环境 
    HRESULT hr = NULL;
    try
    {
        hr = m_pConnection.CreateInstance(_uuidof(Connection));//创建连接对象实例
        if (SUCCEEDED(hr))
        {
            m_pConnection->ConnectionString =
                ("Provider = SQLOLEDB.1; Persist Security Info = False;
                User ID = ARP; Password=123456; Initial Catalog = school; Data Source = (local)");
            hr = m_pConnection->Open("", "", "", adConnectUnspecified);//打开数据库
            if (FAILED(hr))
            {
                AfxMessageBox(_T("Open Failed!"));    
            }
        }
        else
        {
            AfxMessageBox(_T("Create instance of connection failed!"));
        }
    }
    catch (_com_error e)
    {
        CString temp;
        temp.Format(_T("数据库连接错误\r\n错误信息为:%s"), e.ErrorMessage());
        AfxMessageBox(temp);
    }
}
查询数据库
void CtestDlg::OnBnClickedAdd()
{
    // TODO: 在此添加控件通知处理程序代码
    try
    {
        m_pRecordset.CreateInstance("ADODB.Recordset");
        m_pRecordset->Open("select sno, cno, grade from sc",
        _variant_t((IDispatch*)m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText);
    }
    catch (_com_error &e)
    {
        AfxMessageBox(e.Description());
    }
    _variant_t sno, cno, grade;
    try
    {
        int num = m_list.GetItemCount();
        while (!m_pRecordset->adoEOF)
        {
            CString sno= (_bstr_t)(m_pRecordset->Fields->GetItem(_variant_t("sno"))->Value);
            CString cno = (_bstr_t)(m_pRecordset->Fields->GetItem(_variant_t("cno"))->Value);
            CString grade = (_bstr_t)(m_pRecordset->Fields->GetItem(_variant_t("grade"))->Value);
 
            m_list.InsertItem(num, sno);
            m_list.SetItemText(num, 1, cno);
            m_list.SetItemText(num , 2, grade);
 
            num++;
            m_pRecordset->MoveNext();
        }
    }
    catch (_com_error &e)
    {
        AfxMessageBox(e.Description());
    }
}
插入数据(不带参数)
try
{
    if(!m_pRecordset->Supports(adAddNew)) return;
 
    m_pRecordset->AddNew(); 
    m_pRecordset->Fields->GetItem
        (_variant_t("姓名"))->Value=_bstr_t("赵薇");
    m_pRecordset->Fields->GetItem
        (_variant_t("性别"))->Value=_bstr_t("女");
    m_pRecordset->Fields->GetItem
        (_variant_t("age"))->Value=_variant_t((short)20);
    m_pRecordset->Fields->GetItem
        (_variant_t("marry"))->Value=_bstr_t("未婚");
    m_pRecordset->Update(); 
}//try
catch (_com_error &e)
{
    ::MessageBox(NULL, "又出毛病了。","提示",MB_OK │ MB_ICONWARNING);

删除数据
try
{
    m_pRecordset->MoveFirst(); 
    while(m_pRecordset->adoEOF==VARIANT_FALSE) 
    {
        CString sName=(char*)(_bstr_t)(m_pRecordset->Fields->GetItem
            (_variant_t("姓名"))->Value);
        if(::MessageBox(NULL,"姓名="+sName+"\n删除她吗?",
            "提示",MB_YESNO │ MB_ICONWARNING)==IDYES)
        {
            m_pRecordset->Delete(adAffectCurrent); 
            m_pRecordset->Update();
        }
        m_pRecordset->MoveNext(); 
    }
}//try
catch (_com_error &e)
{
    ::MessageBox(NULL,"又出毛病了。","提示",MB_OK │ MB_ICONWARNING);

        源代码连接:http://download.csdn.net/detail/u010499449/8311739
--------------------- 
作者:_西西_ 
来源:CSDN 
原文:https://blog.csdn.net/u010499449/article/details/42237887 
版权声明:本文为博主原创文章,转载请附上博文链接!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值