VC中用ADO连接了ORACLE 怎样把一个数据库的表插入到另外一个数据库的表

时间:2021-02-28 08:18:47
小弟是新手 正在研究用ADO连接ORACLE并实现2个数据库直接数据的插入  连接上一个数据库但是不会插入另外一个数据库 请高手指点!

10 个解决方案

#1


兄台,请勿发蛋贴

#2


引用 1 楼 tr0j4n 的回复:
兄台,请勿发蛋贴

刚上论坛 没分。。。

#3


帖子已加分    已经连上数据库了

需要用Command还是Recordset 实现SQL语句啊  要连2个数据库 在2个地址都新建了2个字段名一样的表 想表和表之间的插入 请高手指教。。。 

#4


两个Connection,两个RecordSet,足够,一个RS GetCollect,取到值后给另外一个PutCollect

#5


高手能不能具体点啊。。。
HRESULT hr;

try
{
   hr=m_pConnection.CreateInstance(__uuidof(Connection)); //创建connection实例

if(SUCCEEDED(hr))
{
hr=m_pConnection->Open(_bstr_t(L"provider=OraOLEDB.Oracle.1;User ID=123;Password=123;Data source=192.168.1.1;Persist security info=False"),L"",L"",adModeUnknown);
//m_pConnection->ConnectionTimeout = 10; ///设置超时时间为10秒
if(SUCCEEDED(hr))
{
m_isConnectionopen = TRUE;
return TRUE;
}
}
}
catch(_com_error &e) //捕捉异常
{
_bstr_t bstrSource(e.Source());
_bstr_t bstrDescription(e.Description());
TRACE("Exception thrown for classes generated by #import");
TRACE("\tCode=%081x \n",e.Error());
TRACE("\tCode meaning=%s \n",e.ErrorMessage());
TRACE("\tSource=%s \n",(LPCTSTR) bstrSource);
TRACE("\tDescription=%s \n",(LPCTSTR)bstrDescription);
return FALSE;
}
return FALSE;
}

这是我的连接代码 可命令怎么写啊。。。

#6


是两个不同数据库的传输。。。我比较菜 请高手指教

#7


_RecordsetPtr m_pRecordset;
CString strSql="select * from middle";//这里放自己的SQL语句
BSTR bstrSQL = strSql.AllocSysString(); 
m_pRecordset->Open(bstrSQL,(IDispatch*)m_pConnection,adOpenDynamic,adLockOptimistic,adCmdText); 


这样就能获得RecordSet对象了

RS对象不是有很多方法的嘛

while(!m_pRecordset->adoEOF)//遍历所有记录
  { 
   //取纪录字段值方式之一
   _variant_t TheValue; //VARIANT数据类型
   TheValue = m_pRecordset->GetCollect("BIG_NAME");//得到字段BIG_NAME的值
   if(TheValue.vt!=VT_NULL)
    m_List.AddString((char*)_bstr_t(TheValue));
   //将该值加入到列表控件中
 
   //取纪录字段值方式之二
   // _bstr_t TheValue1=m_pRecordset->Fields->GetItem("BIG_NAME")->Value;
   // CString temp=TheValue1.copy();
   // m_List.AddString(temp);
   //数据类型转换
   _variant_t vUsername,vBirthday,vID,vOld;
   TRACE("id:%d,姓名:%s,年龄:%d,生日:%s\r\n",
   vID.lVal,(LPCTSTR)(_bstr_t)vUsername,vOld.lVal,(LPCTSTR)(_bstr_t)vBirthday);

   m_pRecordset->MoveNext();//转到下一条纪录
  }


得到数据用GetCollect,写用PutCollect

#8


引用 4 楼 tr0j4n 的回复:
两个Connection,两个RecordSet,足够,一个RS GetCollect,取到值后给另外一个PutCollect

一个库用一个Connection和一个RecordSet
另外一个一样,都取各自那个表

然后一个RS GetCollect 取出值后 让另外一个RS PutCollect进去

#9


引用 1 楼 tr0j4n 的回复:
兄台,请勿发蛋贴

...我说过 这句话有效吧!!!

#10


呵呵 相当有效。。。  还有一个问题  如果实行数据库和数据库直接的连接 从一个表写到另外一个表(表和表的字段都一样) 不做修改 能不能表和表直接插入 怎么插入啊

#1


兄台,请勿发蛋贴

#2


引用 1 楼 tr0j4n 的回复:
兄台,请勿发蛋贴

刚上论坛 没分。。。

#3


帖子已加分    已经连上数据库了

需要用Command还是Recordset 实现SQL语句啊  要连2个数据库 在2个地址都新建了2个字段名一样的表 想表和表之间的插入 请高手指教。。。 

#4


两个Connection,两个RecordSet,足够,一个RS GetCollect,取到值后给另外一个PutCollect

#5


高手能不能具体点啊。。。
HRESULT hr;

try
{
   hr=m_pConnection.CreateInstance(__uuidof(Connection)); //创建connection实例

if(SUCCEEDED(hr))
{
hr=m_pConnection->Open(_bstr_t(L"provider=OraOLEDB.Oracle.1;User ID=123;Password=123;Data source=192.168.1.1;Persist security info=False"),L"",L"",adModeUnknown);
//m_pConnection->ConnectionTimeout = 10; ///设置超时时间为10秒
if(SUCCEEDED(hr))
{
m_isConnectionopen = TRUE;
return TRUE;
}
}
}
catch(_com_error &e) //捕捉异常
{
_bstr_t bstrSource(e.Source());
_bstr_t bstrDescription(e.Description());
TRACE("Exception thrown for classes generated by #import");
TRACE("\tCode=%081x \n",e.Error());
TRACE("\tCode meaning=%s \n",e.ErrorMessage());
TRACE("\tSource=%s \n",(LPCTSTR) bstrSource);
TRACE("\tDescription=%s \n",(LPCTSTR)bstrDescription);
return FALSE;
}
return FALSE;
}

这是我的连接代码 可命令怎么写啊。。。

#6


是两个不同数据库的传输。。。我比较菜 请高手指教

#7


_RecordsetPtr m_pRecordset;
CString strSql="select * from middle";//这里放自己的SQL语句
BSTR bstrSQL = strSql.AllocSysString(); 
m_pRecordset->Open(bstrSQL,(IDispatch*)m_pConnection,adOpenDynamic,adLockOptimistic,adCmdText); 


这样就能获得RecordSet对象了

RS对象不是有很多方法的嘛

while(!m_pRecordset->adoEOF)//遍历所有记录
  { 
   //取纪录字段值方式之一
   _variant_t TheValue; //VARIANT数据类型
   TheValue = m_pRecordset->GetCollect("BIG_NAME");//得到字段BIG_NAME的值
   if(TheValue.vt!=VT_NULL)
    m_List.AddString((char*)_bstr_t(TheValue));
   //将该值加入到列表控件中
 
   //取纪录字段值方式之二
   // _bstr_t TheValue1=m_pRecordset->Fields->GetItem("BIG_NAME")->Value;
   // CString temp=TheValue1.copy();
   // m_List.AddString(temp);
   //数据类型转换
   _variant_t vUsername,vBirthday,vID,vOld;
   TRACE("id:%d,姓名:%s,年龄:%d,生日:%s\r\n",
   vID.lVal,(LPCTSTR)(_bstr_t)vUsername,vOld.lVal,(LPCTSTR)(_bstr_t)vBirthday);

   m_pRecordset->MoveNext();//转到下一条纪录
  }


得到数据用GetCollect,写用PutCollect

#8


引用 4 楼 tr0j4n 的回复:
两个Connection,两个RecordSet,足够,一个RS GetCollect,取到值后给另外一个PutCollect

一个库用一个Connection和一个RecordSet
另外一个一样,都取各自那个表

然后一个RS GetCollect 取出值后 让另外一个RS PutCollect进去

#9


引用 1 楼 tr0j4n 的回复:
兄台,请勿发蛋贴

...我说过 这句话有效吧!!!

#10


呵呵 相当有效。。。  还有一个问题  如果实行数据库和数据库直接的连接 从一个表写到另外一个表(表和表的字段都一样) 不做修改 能不能表和表直接插入 怎么插入啊