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



 

 

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

oracle与sql server2000中不在同一个服务器上的数据库数据操作的方法对比

如何操坐不在同一个数据库中的数据操作: 一。对于SQL server来讲:   1.采用创建链接服务器的方式:     (1).创建链接服务器        exec sp_addli...

C# SQL SERVER数据库操作类

  • 2013-12-24 20:19
  • 546KB
  • 下载

ODBC-C语言操作数据库(SQL Server 2000)(上)

1.SQLExecDirect直接执行SQL语句 SQLRETURN SQLExecDirect(                            SQL...

sql server 2000收缩数据库【极简操作】

个人理解,数据库在平凡长期操作的过程中会数据的日志文件永远是按一定的比例在增加,数据文件在数据库删除大量的数据后不一定减小磁盘空间,反复操作会出现空间浪费,所以收缩数据库将会得以体现。 假设把数据库...

ODBC-C语言操作数据库(SQL Server 2000)(下)

1.SQLBindParameter参数绑定 SQLRETURN SQLBindParameter(                           SQLHSTMT...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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