C++操作DB+FILE

来源:互联网 发布:魔蝎数据怎么填 编辑:程序博客网 时间:2024/05/19 00:39

#include <windows.h>
#include <stdio.h>
#include <iostream.h>
#include <memory.h>
#include <string.h>
#include <msxml.h>
#include <atlbase.h>
#import "msado15.dll" no_namespace rename ("EOF", "adoEOF")  //ado connection database

 

// s8.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"

char* CloneString(char* src)
{
 if(!src)
  return NULL;
 char* dst = (char*)malloc(strlen(src)+1);
 memset(dst, 0, strlen(src)+1);
 strcpy(dst,src);
 return dst;
}

void Output(char* txt){
 cout<<txt<<endl;
}

void Output(const char* txt){
 cout<<txt<<endl;
}

int GetCollectInt(_RecordsetPtr m_pRecordset, char* key)
{
 VARIANT var = m_pRecordset->GetCollect(key);
 if(var.vt == VT_NULL)
  return NULL;
 return var.intVal;
}

char* GetCollectString(_RecordsetPtr m_pRecordset, char* key)
{
 VARIANT var = m_pRecordset->GetCollect(key);
 if(var.vt == VT_NULL)
  return NULL;
 return CloneString((char*)(_bstr_t)var);
}

 

int main(int argc, char* argv[])
{
 while(true){
 Sleep(5000);

 CoInitialize(NULL);//!!!!!!!!!!!!!

 _ConnectionPtr m_pConnOracle;
 _RecordsetPtr m_pRecordset;

 HRESULT hr;
 char conn[_MAX_PATH+1] = {0};
 FILE* fp;
 //char RssFile[_MAX_PATH+1] = {0};
 char* temp;
 //char LINK[_MAX_URL] = {0};
 GetPrivateProfileString("database", "OraConnStr", "", conn, MAX_PATH, "./Config.ini");

 fp = fopen("c://1.txt", "wb");

 try                
    { 
  char SQL[1024]={0};
  sprintf(SQL,"select * from tabs");  
  hr = m_pConnOracle.CreateInstance("ADODB.Connection");//paperid
  if(SUCCEEDED(hr)){
   m_pConnOracle->Open(conn,"","",adModeUnknown);
   Output("okcon");
  }
  else
  {
  Output("false");
  }
  m_pRecordset.CreateInstance(__uuidof(Recordset));
  m_pRecordset->Open(SQL,      
  m_pConnOracle. GetInterfacePtr(), // 获取库接库的IDispatch指针
  adOpenDynamic,
  adLockOptimistic,
  adCmdText);
  Output("OKrs");

  while(!m_pRecordset->adoEOF)
  {

   temp = GetCollectString(m_pRecordset,"table_name");
   //GetCollectString(m_pRecordset, "publink");
   //GetCollectInt(m_pRecordset,"nsid"));
   Output(temp);
   fwrite(temp, 1, strlen(temp), fp);
   fwrite("/x0d/n", 1, strlen("/x0d/n"), fp);
   m_pRecordset->MoveNext();
  }
  fclose(fp);
  m_pRecordset->Close();
  m_pRecordset.Release();
  m_pConnOracle->Close();
  m_pConnOracle.Release();
       
 }
 catch(_com_error *e)
 {
        Output("数据库打开失败");
  Output("Error in Function: ConnectDataBase");
  Output(e->ErrorMessage());
  return FALSE;
 }
 }
 return TRUE; 
 
}
======================================================

BOOL MakeRssFeed(int paperid, int channelid)
{
 _ConnectionPtr m_pConnOracle;
 _RecordsetPtr m_pRecordset;
 HRESULT hr;
 char conn[_MAX_PATH+1] = {0};
 FILE* fp;
 char RssFile[_MAX_PATH+1] = {0};
 char* temp;
 char LINK[_MAX_URL] = {0};
 GetPrivateProfileString("database", "OraConnStr", "", conn, MAX_PATH, "./Config.ini");
 try                
    {  
  char SQL[_MAX_URL]={0};
  sprintf(SQL,"select * from (select nsid,title,author,to_char(pubtime,'yyyy-mm-dd') as pubtime ,to_char(pubtime,'yyyy-mm/dd') as publink from nsreleaselib  where to_char(pubtime,'yymmdd')=to_char(sysdate,'yymmdd') and masterid in (select distinct nodeid from typestruct where rootid=%d and nodename in (select pagenumber from pageinfo where  paperid=%d and to_char(pagedate,'yymmdd')=to_char(sysdate,'yymmdd') and pagecnname like (select pagename from tmp_pagename_id where pid=%d)||'%'))) order by pubtime desc",
   paperid,paperid,channelid);
  hr = m_pConnOracle.CreateInstance("ADODB.Connection");//paperid
  if(SUCCEEDED(hr)){
   // 打开本地Access库db1.mdb
   m_pConnOracle->Open(conn,"","",adModeUnknown);
  }
  m_pRecordset.CreateInstance(__uuidof(Recordset));
  m_pRecordset->Open(SQL,      
  m_pConnOracle. GetInterfacePtr(), // 获取库接库的IDispatch指针
  adOpenDynamic,
  adLockOptimistic,
  adCmdText);
  Output("OK0");
  sprintf(RssFile, "./RssFeed/rss_%d.xml", channelid);
  fp = fopen(RssFile, "wb");
  if(fp)
   Output("OK1");
  fwrite("<?xml version='1.0' encoding='gb2312'?>/x0d/n", 1, strlen("<?xml version='1.0' encoding='gb2312'?>/x0d/n"), fp);
  fwrite("<rss version='2.0'>/x0d/n", 1, strlen("<rss version='2.0'>/x0d/n"), fp);
  fwrite("<channel>/x0d/n", 1, strlen("<channel>/x0d/n"), fp);
  fwrite("<link>http://epaper.tianjindaily.com.cn</link>/x0d/n", 1,
   strlen("<link>http://epaper.tianjindaily.com.cn</link>/x0d/n"), fp);
  Output("begin loop");
  while(!m_pRecordset->adoEOF){
   fwrite("<item>/x0d/n", 1, strlen("<item>/x0d/n"), fp);
   fwrite("<title>", 1, strlen("<title>"), fp);
   temp = GetCollectString(m_pRecordset, "title");
   fwrite(temp, 1, strlen(temp), fp);
   fwrite("</title>/x0d/n", 1, strlen("</title>/x0d/n"), fp);
   fwrite("<link>", 1, strlen("<link>"), fp);
   temp = GetCollectString(m_pRecordset, "publink");
   sprintf(LINK,"http://epaper.tianjindaily.com.cn/tjrb/tjrb/%s/content_%d.htm",
    temp, GetCollectInt(m_pRecordset,"nsid"));
   free(temp);
   fwrite(LINK, 1, strlen(LINK), fp);
   fwrite("</link>/x0d/n", 1, strlen("</link>/x0d/n"), fp);
   fwrite("</item>/x0d/n", 1, strlen("</item>/x0d/n"), fp);
   m_pRecordset->MoveNext();
  }
  fwrite("</channel>/x0d/n", 1, strlen("</channel>/x0d/n"), fp);
  fwrite("</rss>/x0d/n", 1, strlen("</rss>/x0d/n"), fp);
  fclose(fp);
  Output("OK2");
  m_pRecordset->Close();
  m_pRecordset.Release();
  m_pConnOracle->Close();
  m_pConnOracle.Release();
 }       
 catch(_com_error *e)
 {
        Output("数据库打开失败");
  Output("Error in Function: ConnectDataBase");
  Output(e->ErrorMessage());
  return FALSE;
 }
 return TRUE; 
}
 

原创粉丝点击