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

原创 2007年09月18日 08:38:00

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;
}



 

 

用ADO连接SQL Server数据库

这篇文章不是介绍ADO连接数据库的原理的,而是写一下连接的步骤和简便方法。 一、获取连接字符串。 连接数据库时需要用到  _ConnectionPtr  对象的open方法,参数如下: HRES...
  • zhangkaihang
  • zhangkaihang
  • 2012年04月25日 18:23
  • 17717

MFC或VC++中利用ADO连接数据库的步骤

1 事先初始化COM库 ::CoInitialize(NULL);   2:定义_ConnectionPtr 对象指针,通过m_pConnection.CreateInstance("ADODB...
  • zhangyulin54321
  • zhangyulin54321
  • 2012年10月09日 21:59
  • 10702

20160229 VC++中使用ADO连接数据库

ADO 是目前在Windows环境中比较流行的客户端数据库编程技术。ADO是建立在OLE DB底层技术之上的高级编程接口,因而它兼具有强大的数据处理功能(处理各种不同类型的数据源、分布式的数据处理等...
  • KevinHuang2088
  • KevinHuang2088
  • 2016年02月29日 13:48
  • 2092

ADO连接SQL数据库的几种方式

VB使用ADO数据库可以分为有源数据库和无源数据库,即是否使用了DSN数据源。一、使用DSN连接。使用 ODBC DSN 连接数据库有两种方式,一种为SYSTEM DSN、一种为DSN文件,因此在使用...
  • Jesse621
  • Jesse621
  • 2011年07月26日 15:02
  • 6407

vc实现SQL数据库ADO连接(菜鸟入门篇)

关于vc6.0中实现ADO SQL数据库连接的文章网上虽然很多,但大多写的很繁琐,对于我们这样的菜鸟来说,还是很希望有一篇能把看似一个复杂的问题简单化的文章的。从网上收集了一些资料实践过后晒到博客里,...
  • wxlcx
  • wxlcx
  • 2009年11月25日 16:39
  • 2184

以ado方式链接sqlserver数据库和access数据库 语言:c++

关于基本介绍转自:ADO接口之_ConnectionPtr点击打开链接 ADO中最重要的对象有三个:Connection、Recordset和Command,分别表示连接对象、记录集对象和命令对象。...
  • zhengudaoer
  • zhengudaoer
  • 2017年06月19日 10:18
  • 510

解决ADO通过指定IP地址连接到SQLServer数据库时总是失败问题

这几天在开发一个自己单位用的小平台,B/S结构,需要连接局域网内的SQLServer2005服务器,连接字符串在查了资料后是这样的:       connectString="Provider=...
  • painy
  • painy
  • 2015年03月02日 13:58
  • 3474

VC++ MFC SQL ADO数据库访问技术使用的基本步骤及方法

1.首先,要用#import语句来引用支持ADO的组件类型库(*.tlb),其中类型库可以作为可执行程序(DLL、EXE等)的一部分被定位在其自身程序中的附属资源里,如:被定位在msado15.dll...
  • shenyulv
  • shenyulv
  • 2010年10月26日 08:44
  • 8483

坑:ADO连数据库服务器地址要加端口号

//ADO连公司的数据库服务器,要加端口号。网上资料都没有,有点坑。   //ADO连公司的数据库服务器,要加端口号。网上资料都没有,有点坑。 _ConnectionPtr m_pConnection...
  • seulww
  • seulww
  • 2013年11月15日 16:44
  • 825

ADO数据库连接语句(大全?)

数据库连接查询手册 下面将简单介绍一下几种ADO连接方式:ODBC DSN,ODBC DSN-Less,  OLE DB Provider 和 MS Remote ProviderI.DSNoConn...
  • roger_77
  • roger_77
  • 2006年03月14日 23:26
  • 3045
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Ado 连接数据库 Sql Server2000 及基本数据库操作
举报原因:
原因补充:

(最多只允许输入30个字)