跨数据库Copy的一个类的代码

简介: 跨数据库Copy的一个类的代码

跨数据库Copy的一个类的代码 希望对大家能有所帮助


#include "StdAfx.h"
#include "./dbcopyclass.h"
CDbCopyClass::CDbCopyClass(void)
{
 ::CoInitialize(NULL);
 pconn.CreateInstance(__uuidof(Connection));
 pSourceConn.CreateInstance(__uuidof(Connection));
 prs.CreateInstance(__uuidof(Recordset));
 m_pCmd.CreateInstance(__uuidof(Command));
 m_SourceRs.CreateInstance(__uuidof(Recordset));
 m_DesRs.CreateInstance(__uuidof(Recordset));
/// m_fields.CreateInstance(__uuidof(Fields));
 //m_fieldPtr.CreateInstance(__uuidof(FieldPtr));
}
CDbCopyClass::~CDbCopyClass(void)
{
 prs.Release();
 m_SourceRs.Release();
 m_DesRs.Release();
 pconn.Release();
 pSourceConn.Release();
 m_pCmd.Release();
 ::CoUninitialize();
}
/***************************************************************************************************
** 函数名  :RestoreData
** 输  入  :const CString &desc 目的数据库路径
**           const CString &source 源数据库路径
** 输    出:
** 功能描述:将源数据库中的内容导入到目的数据库中
** 全局变量:
** 调用模块:
** 作    者:刘志永
** 日    期:2008-9-10
** 修    改:
** 日    期:
** 版    本:
***************************************************************************************************/
BOOL CDbCopyClass::RestoreData(const CString &desc, const CString &source)
{
 try
 {
  CString tmpFrom(source);
  CString tmpTo(desc);   
  char buf[512];
  buf[0]='0';
  strcpy(buf,"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=");
  strcat(buf,tmpTo);  
  strcat(buf,";Persist Security Info=False");
  char bufSource[512];
  bufSource[0]='0';
  strcpy(bufSource,"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=");
  strcat(bufSource,tmpFrom); 
  strcat(bufSource,";Persist Security Info=False");
  pconn->ConnectionString=buf; 
  pSourceConn->ConnectionString=bufSource;
  pconn->Open("","","",adConnectUnspecified);
  pSourceConn->Open("","","",adConnectUnspecified);
  prs=pSourceConn->OpenSchema(adSchemaTables);
  m_pCmd->ActiveConnection = pconn;
  while (!prs->adoEOF)
  {
   if (!strcmp((_bstr_t)prs->Fields->GetItem("TABLE_TYPE")->Value,"TABLE"))
   {    
     _bstr_t bstTableName=(_bstr_t)prs->Fields->GetItem("TABLE_NAME")->Value;
        if (m_SourceRs->GetState()==1)
     {
      m_SourceRs->Close();
     }  
     if (m_DesRs->GetState()==1)
     {
      m_DesRs->Close();
     }
     if (bstTableName==_bstr_t("User"))
     {
      bstTableName=_bstr_t("[User]");
     }
     _bstr_t strSqlDel="Delete From "+bstTableName;
     //m_pCmd.
     m_pCmd->CommandText=strSqlDel;
     m_pCmd->CommandType=adCmdText;
     m_pCmd->Execute(NULL,NULL,adCmdText);
     char buf[512];
     buf[0]='0';
     strcpy(buf," SELECT * From ");
     strcat(buf,bstTableName);
     m_SourceRs->CursorType = adOpenStatic;
     m_SourceRs->CursorLocation = adUseClient;
     m_DesRs->CursorType = adOpenStatic;
     m_DesRs->CursorLocation = adUseClient;
     m_SourceRs->Open(buf,_variant_t((IDispatch*)pSourceConn,TRUE),adOpenStatic,adLockOptimistic,adCmdUnknown);
     m_DesRs->Open(buf,_variant_t((IDispatch*)pconn,TRUE),adOpenStatic,adLockOptimistic,adCmdUnknown);
     int nFieldsCount=m_SourceRs->Fields->Count;
     while (!m_SourceRs->adoEOF)
     {
      m_DesRs->AddNew();
      for (int nLoop=0;nLoop<nFieldsCount;nLoop++)
      {
       _variant_t vtIndex;
       vtIndex.vt = VT_I2;
       vtIndex.iVal = nLoop;
       _variant_t tFieldValue=m_SourceRs->Fields->GetItem(vtIndex)->Value;
       m_DesRs->Fields->GetItem(vtIndex)->put_Value(tFieldValue);
      }
      m_DesRs->Update();
      m_SourceRs->MoveNext();
     }
    prs->MoveNext();
  }
   else
    prs->MoveNext();
  }
  prs->Close();
  pconn->Close();
  pSourceConn->Close(); 
  return TRUE;
 }
 catch (...)
 {
  return FALSE;
 }
}


相关文章
|
2月前
|
SQL 存储 监控
|
2月前
|
消息中间件 Java 数据库连接
【消息队列开发】 对核心类实现数据库管理
【消息队列开发】 对核心类实现数据库管理
|
3天前
|
SQL 数据库
Spring5入门到实战------13、使用JdbcTemplate操作数据库(批量增删改)。具体代码+讲解 【下篇】
这篇文章是Spring5框架的实战教程,深入讲解了如何使用JdbcTemplate进行数据库的批量操作,包括批量添加、批量修改和批量删除的具体代码实现和测试过程,并通过完整的项目案例展示了如何在实际开发中应用这些技术。
Spring5入门到实战------13、使用JdbcTemplate操作数据库(批量增删改)。具体代码+讲解 【下篇】
|
3天前
|
XML 数据库 数据格式
Spring5入门到实战------14、完全注解开发形式 ----JdbcTemplate操作数据库(增删改查、批量增删改)。具体代码+讲解 【终结篇】
这篇文章是Spring5框架的实战教程的终结篇,介绍了如何使用注解而非XML配置文件来实现JdbcTemplate的数据库操作,包括增删改查和批量操作,通过创建配置类来注入数据库连接池和JdbcTemplate对象,并展示了完全注解开发形式的项目结构和代码实现。
Spring5入门到实战------14、完全注解开发形式 ----JdbcTemplate操作数据库(增删改查、批量增删改)。具体代码+讲解 【终结篇】
|
3天前
|
SQL XML Java
Spring5入门到实战------12、使用JdbcTemplate操作数据库(增删改查)。具体代码+讲解 【上篇】
这篇文章是Spring5框架的实战教程,详细讲解了如何使用JdbcTemplate进行数据库的增删改查操作,包括在项目中引入依赖、配置数据库连接池、创建实体类、定义DAO接口及其实现,并提供了具体的代码示例和测试结果,最后还提供了完整的XML配置文件和测试代码。
Spring5入门到实战------12、使用JdbcTemplate操作数据库(增删改查)。具体代码+讲解 【上篇】
|
6天前
|
数据库连接 数据库
实现加载驱动、得到数据库对象、关闭资源的代码复用,将代码提取到相应的工具包里边。优化程序
该博客文章展示了如何通过创建工具类`Connectiontools`实现数据库连接、语句执行以及资源关闭的代码复用,以优化程序并提高数据库操作的效率和安全性。
|
6天前
|
SQL Java 关系型数据库
应用DriverManager类创建sqlserver数据库连接实例 JSP中使用数据库
该博客文章介绍了在JSP中使用JDBC连接SQL Server数据库的方法,包括加载数据库驱动、建立数据库连接的过程,并提供了一个使用DriverManager类创建数据库连接的Java示例代码。
|
6天前
|
SQL 存储 Java
完整java开发中JDBC连接数据库代码和步骤
该博客文章详细介绍了使用JDBC连接数据库的完整步骤,包括加载JDBC驱动、提供连接URL、创建数据库连接、执行SQL语句、处理结果以及关闭JDBC对象的过程,并提供了相应的示例代码。
|
3天前
|
存储 NoSQL 关系型数据库
Web中的数据库:原理、应用与代码实现
Web中的数据库:原理、应用与代码实现
|
5天前
|
SQL 存储 Java
完整java开发中JDBC连接数据库代码和步骤
该博客文章详细介绍了使用JDBC连接数据库的完整步骤,包括加载JDBC驱动、提供连接URL、创建数据库连接、执行SQL语句、处理结果以及关闭JDBC对象的过程,并提供了相应的示例代码。