Ado 连接数据库 Sql Server2000 及基本数据库操作

ADOConn.h

 

//  ADOConn.h: interface for the CADOConn class.
//
//

#if  !defined(AFX_ADOCONN1_H__E411A6A3_90BA_4C07_8BC5_5F48FFF4DB07__INCLUDED_)
#define  AFX_ADOCONN1_H__E411A6A3_90BA_4C07_8BC5_5F48FFF4DB07__INCLUDED_

#include 
< ole2.h >
// #include <stdio.h>
// #include <conio.h>


#if  _MSC_VER > 1000
#pragma  once
#endif   //  _MSC_VER > 1000
#include 
" sqlext.h "
#import 
" c:Program FilesCommon FilesSystemadomsado15.dll " no_namespace rename( " EOF " , " adoEOF " )rename( " BOF " , " adoBOF " )

class  CADOConn 
{
public:
    CADOConn();
    
virtual ~CADOConn();
public:
    
//ADODB::_ConnectionPtr   m_pConnect   
    
//_ConnectionPtr m_pConnection;
    
//_RecordsetPtr  m_pRecordset;
    
public:
    
int FindRecordSet(CString m_sql,CString strField,CString str);
    
int DeleteRecordSet(CString m_sql);
    
//初始化——连接数据库
    static void OnInitDBConnect();
    
//执行查询
    static _RecordsetPtr& GetRecordSet(_bstr_t bstrSQL);
    
//Insetr Update _variant_t
    static BOOL ExecuteSQL(_bstr_t bstrSQL);
    
void ExitConnect();
    
//获得表长
    int GetRecordCount(CString strTable, int &nCount, CString strCondition = _T(""));
    
//sql语句,待查属性列,查询结果
    static int SelectRecordSet(CString m_sql,CString strField,CString &strResult);
    
//修改属性值
    int UpdateRecordSet(CString m_sql, CString strField, CString str);
    
int InsertRecord(CString strTable, int nCount, CString *strFields,    CString *strValue, 
        CString strkeyfield 
= _T(""), CString strkey = _T(""));
    
}
;

#endif   //  !defined(AFX_ADOCONN1_H__E411A6A3_90BA_4C07_8BC5_5F48FFF4DB07__INCLUDED_)

 

ADOConn.cpp

 

//  ADOConn.cpp: implementation of the CADOConn class.
//
//

#include 
" stdafx.h "
#include 
" MyClient.h "
#include 
" ADOConn.h "

// #include "ExamTest.h"
#ifdef _DEBUG
#undef  THIS_FILE
static   char  THIS_FILE[] = __FILE__;
#define  new DEBUG_NEW
#endif

_ConnectionPtr m_pConnection;
_RecordsetPtr  m_pRecordset;
extern  CMyClientApp theApp;
////
//  Construction/Destruction
//


CADOConn::CADOConn()
{

}


CADOConn::
~ CADOConn()
{

}


void  CADOConn::OnInitDBConnect()
{    
    CString strUser;
    CString strPwd;
    CString strservername;
    CString strdbname;
    CString strConnection;
    
    strUser 
= theApp.m_strDBUserApp;
    strPwd 
= theApp.m_strDBPwdApp;
    strConnection 
= "Provider=SQLOLEDB.1;Server=" + theApp.m_strServerApp+ ";Database=TroubleCheck";
    
    ::CoInitialize(NULL);

    
try
    
{

        m_pConnection.CreateInstance(__uuidof(Connection));
//******************
        _bstr_t strConnect = (_bstr_t)strConnection;
    
        m_pConnection
->Open(strConnect,(_bstr_t)strUser,(_bstr_t)strPwd,adModeUnknown);//****************
        theApp.isDBOK = TRUE;
    }


    
catch(_com_error e)
    
{
        
//AfxMessageBox(e.Description()+"系统退出!");
        
//exit(0);//***********************************
        AfxMessageBox("数据库连接失败,请重新配置连接数据库!");
        ::SendMessage(theApp.hwndmainDlg,WM_SETDBSERVER,
0,0);
    }

}


_RecordsetPtr
&  CADOConn::GetRecordSet(_bstr_t bstrSQL)
{
    
try
    
{
        
        
if (m_pConnection == NULL)
        
{
            OnInitDBConnect();
        }

        
        m_pRecordset.CreateInstance(_uuidof(Recordset));
        m_pRecordset
->Open(bstrSQL,(_variant_t)m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
    }

    
catch (_com_error e)
    
{
        AfxMessageBox(e.Description()
+"系统退出!");
        exit(
0);
        
//AfxMessageBox("2");
    }

    
return m_pRecordset;
//     _variant_t var;
}


BOOL CADOConn::ExecuteSQL(_bstr_t bstrSQL)
// ************************
{
    
try
    
{
        
if (m_pConnection == NULL)
        
{
            
//AfxMessageBox("自动连接!");
            OnInitDBConnect();
        }

        m_pConnection
->Execute(bstrSQL ,NULL,adCmdText);
    }

    
catch (_com_error e)
    
{
        AfxMessageBox(e.Description()
+"系统退出!");
        exit(
0);
    }

    
return true;
}


void  CADOConn::ExitConnect()
{    
    
if (m_pRecordset != NULL)
    
{    
        m_pRecordset
->Close();
        m_pConnection
->Close();
        ::CoUninitialize();
    }

}



int  CADOConn::SelectRecordSet(CString m_sql,CString strField,CString  & strResult)
{
    _variant_t    varTemp;
    _RecordsetPtr m_pRecord 
= NULL;

    
try
    
{
        m_pRecord 
= GetRecordSet((_bstr_t)m_sql);
        
if (m_pRecord != NULL)
        
{
            
if (!m_pRecord->adoBOF)
            
{
                m_pRecord
->MoveFirst();
            }

            
while(!m_pRecord->adoEOF)
            
{
                varTemp 
= m_pRecord->GetCollect((_bstr_t)strField);
                
if (varTemp.vt == VT_NULL)
                
{
                    strResult 
= _T("");
                }

                strResult 
= (LPCSTR)_bstr_t(varTemp);
                
//strResult.TrimRight();
                m_pRecord->MoveNext();        
            }

        }

        
else
            
return 0;
    }

    
catch (...) 
    
{
        AfxMessageBox(
"读取失败,请检查数据库!");
        
return 0;
    }

    
return 1;
}



int  CADOConn::UpdateRecordSet(CString m_sql, CString strField, CString str)
{
    _variant_t    varTemp;
    _RecordsetPtr m_pRecord 
= NULL;
    
    
try
    
{
        m_pRecord 
= GetRecordSet((_bstr_t)m_sql);
        
if (m_pRecord!=NULL)
        
{
            
if (!m_pRecord->adoBOF)
            
{
                m_pRecord
->MoveFirst();
            }

            
while(!m_pRecord->adoEOF)
            
{    
                m_pRecord
->PutCollect((_bstr_t)strField,_variant_t(str));
                m_pRecord
->Update();
                m_pRecord
->MoveNext();        
            }

        }

    }

    
catch (...) 
    
{
        AfxMessageBox(
"读取失败,请检查数据库!");
        
return 0;
    }

    
return 1;
}


int  CADOConn::FindRecordSet(CString m_sql, CString strField, CString str)
{
    _variant_t    varTemp;
    _RecordsetPtr m_pRecord 
= NULL;
    CString strTemp;
    
    
try
    
{
        m_pRecord 
= GetRecordSet((_bstr_t)m_sql);
        
if (m_pRecord!=NULL)
        
{
            
if (!m_pRecord->adoBOF)
            
{
                m_pRecord
->MoveFirst();
            }

            
while(!m_pRecord->adoEOF)
            
{    
                varTemp 
= m_pRecord->GetCollect((_bstr_t)strField);
                
if (varTemp.vt == VT_NULL)
                
{
                    strTemp 
= _T("");
                }

                strTemp 
= (LPCSTR)_bstr_t(varTemp);
                strTemp.TrimRight();
                
if (!strcmp(strTemp,str))
                    
return 1;
                m_pRecord
->MoveNext();        
            }

        }

    }

    
catch (...) 
    
{
        AfxMessageBox(
"读取失败,请检查数据库!");
        
return 0;
    }

    
return 1;
}


int  CADOConn::DeleteRecordSet(CString m_sql)
{
    
if(!ExecuteSQL(_bstr_t(m_sql)))
    
{
        
return 0;
    }

    
else
    
{
        AfxMessageBox(
"删除成功");
        
return 1;
    }

}


int  CADOConn::GetRecordCount(CString strTable,  int   & nCount, CString strCondition)
{
    _RecordsetPtr m_pRecord 
= NULL;
    
int nCounter = 0;
    CString m_sql;
    m_sql 
= "select * from " + strTable + strCondition;
    
try
    
{
        m_pRecord 
= GetRecordSet((_bstr_t)m_sql);
        
if (m_pRecord!=NULL)
        
{
            
if (!m_pRecord->adoBOF)
            
{
                m_pRecord
->MoveFirst();
            }

            
while(!m_pRecord->adoEOF)
            
{
                m_pRecord
->MoveNext();
                nCounter
++;
            }

        }

        nCount 
= nCounter;
    }

    
catch (...) 
    
{
        AfxMessageBox(
"数据库错误");
        
return 0;
    }

    
return 1;
}


// return -1:主键冲突 /注意m_Storedata=VT_NULL的情况,要做处理
// strTable:表名
// nCount:属性列数
// strFields:属性列名
// strValue:属性列值
// strKeyfield:主键名
// strKey:主键属性值
int  CADOConn::InsertRecord(CString strTable,  int  nCount, CString  * strFields,
                            CString 
* strValue,CString strKeyfield, CString strKey)
{

    CString m_sql;
    _RecordsetPtr m_pRecord;
    _variant_t m_Storedata;
    
try
    
{
        
if (strKeyfield != "")
        
{
            m_sql 
= "select * from " + strTable;
            m_pRecord 
= GetRecordSet((_bstr_t)m_sql);
            
if (m_pRecord!=NULL)
            
{
                
if (!m_pRecord->adoBOF)
                
{
                    m_pRecord
->MoveFirst();
                }

                
                
while (!m_pRecord->adoEOF)
                
{
                    m_Storedata 
= m_pRecord->GetCollect((_bstr_t)strKeyfield);
                    
if ((LPCSTR)_bstr_t(m_Storedata)==strKey)
                    
{
                        
return 0;
                    }

                    m_pRecord
->MoveNext();
                }

            }
    
        }

        
        m_sql 
= "insert into " + strTable + " (";
        
for (int i=0; i<nCount-1; i++)
        
{
            m_sql 
+= strFields[i] + ",";
        }

        m_sql 
+= strFields[nCount-1+ "";
        m_sql 
+= "values (";
        
for (i=0; i<nCount-1; i++)
        
{
            m_sql 
+= strValue[i] + ",";
        }

        m_sql 
+= strValue[nCount-1+ "";
        
        ExecuteSQL((_bstr_t)m_sql);
    }

    
catch (...) 
    
{
        AfxMessageBox(
"数据库错误");
        
return 0;
    }

    
return 1;
}



 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
连接sqlserver数据库需要使用ADO(ActiveX Data Objects)技术,以下是C++ ADO连接sqlserver数据库的头文件、源文件和主函数调用示例: 头文件: ```c++ #include <iostream> #include <windows.h> #import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF", "adoEOF") ``` 源文件: ```c++ using namespace std; int main() { // 定义ADO相关变量 _ConnectionPtr pConn; _RecordsetPtr pRs; HRESULT hr; // 初始化COM库 CoInitialize(NULL); try { // 创建连接对象 hr = pConn.CreateInstance(__uuidof(Connection)); if (FAILED(hr)) { throw _com_error(hr); } // 打开数据库连接 pConn->Open("Provider=SQLOLEDB;Data Source=localhost;Initial Catalog=MyDB;User Id=sa;Password=123456;", "", "", adModeUnknown); // 创建记录集对象 hr = pRs.CreateInstance(__uuidof(Recordset)); if (FAILED(hr)) { throw _com_error(hr); } // 执行SQL查询语句 pRs->Open("SELECT * FROM MyTable", pConn.GetInterfacePtr(), adOpenStatic, adLockReadOnly, adCmdText); // 遍历记录集并输出结果 while (!pRs->adoEOF) { cout << pRs->Fields->GetItem("ID")->Value.intVal << "\t" << pRs->Fields->GetItem("Name")->Value.bstrVal << endl; pRs->MoveNext(); } // 关闭记录集 if (pRs != NULL) { pRs->Close(); pRs.Release(); } // 关闭数据库连接 if (pConn != NULL) { pConn->Close(); pConn.Release(); } } catch (_com_error e) { // 输出错误信息 cout << "Error: " << e.Description() << endl; } // 释放COM库 CoUninitialize(); return 0; } ``` 主函数调用: ```c++ int main() { // 调用连接数据库函数 connectDB(); return 0; } ``` 以上是一个简单的C++ ADO连接sqlserver数据库的示例代码,具体的连接字符串和SQL查询语句需要根据实际情况进行调整。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值