如何动态创建数据库表

(配套例子程序:例2 _动态创建数据库表(ACCESS数据库) 、 例3_动态创建数据库表(SQL Sever 数据库))

编程环境:对话框编程 数据库名:test

1.在StdAfx.h中加入

#import "C:\Program Files\Common Files\System\ado\msadox.dll"

#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF")

注意:对于COM库来说,要调用其中的方法,需要有域名。msadox.dll的默认域名是ADOX, msado15.dll的默认域名是ADODB,也就是说在引用它们的方法时需要在方法前加ADOX:: (ADODB::)。如果在import时用了no_namespace,则不用在方法前加域名,但同时引用多个COM库时只有一个库可以使用no_namespace。

2.定义变量

ADOX::_CatalogPtr     m_pCatalog;
ADOX::_TablePtr        m_pTable;
_ConnectionPtr           m_pConnection;

3.初始化COM库

在OnInitDialog()中添加

::CoInitialize(NULL);

 

4.在OnInitDialog()中创建catalog 和 connection 实例,并分别建立连接

如果是在ACCESS数据库中创建表,代码如下:

try
 {
       CString strConnect;
       char curDir[80];

       //ADOX连接数据库
       m_pCatalog.CreateInstance(__uuidof(ADOX::Catalog));
       GetCurrentDirectory(80,curDir);
       strConnect.Format("Provider=Microsoft.JET.OLEDB.4.0;Data source=%s\\test.mdb",curDir);
       m_pCatalog->PutActiveConnection(_bstr_t(strConnect));

       //ADODB连接数据库
       m_pConnection.CreateInstance(__uuidof(Connection));     //创建连接对象实例
       strConnect="DRIVER={Microsoft Access Driver (*.mdb)};uid=;pwd=;DBQ=test.mdb;";
       m_pConnection->Open(_bstr_t(strConnect),"","",adModeUnknown);   //打开数据库 
 }
 catch(_com_error e)
 {
      AfxMessageBox(e.Description());
 }

  如果是在SQL Sever数据库中创建表,代码如下:

try
 {
  CString strConnect;

  //ADOX连接数据库
  m_pCatalog.CreateInstance(__uuidof(ADOX::Catalog));
  strConnect.Format("Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=test;Data Source=localhost");
  m_pCatalog->PutActiveConnection(_bstr_t(strConnect));

  //ADODB连接数据库
  m_pConnection.CreateInstance(__uuidof(Connection));     //创建连接对象实例
  strConnect="DRIVER={SQL Server};uid=;pwd=;Server=localhost;DATABASE=test";
  m_pConnection->Open(_bstr_t(strConnect),"","",adModeUnknown);   //打开数据库 
 }
 catch(_com_error e)
 {
  AfxMessageBox(e.Description());
 }

 

 

5.在按钮的响应事件中添加

//查看myTable表是否存在,存在的话不再创建该表
 m_pTable = NULL;
 try 
 { 
        int tableCount=m_pCatalog->Tables->Count;
        int i=0;
         while(i<tableCount) 
         {
              m_pTable=(ADOX::_TablePtr)m_pCatalog->Tables->GetItem((long)i);
              CString tableName=(BSTR)m_pTable->Name;
              if(tableName=="myTable")
              { 
                  return; 
               }
              i++; 
        } 
 }
 catch(_com_error &e)   
 {
        AfxMessageBox(e.Description());
        return;
 }
 
 //创建表
 m_pTable = NULL;
 try
 {
        m_pTable.CreateInstance(__uuidof(ADOX::Table));
        m_pTable-> PutName( _bstr_t("myTable"));
        m_pTable-> Columns-> Append( "Column1",ADOX::adInteger,0);
        m_pTable-> Columns-> Append( "Column2",ADOX::adInteger,0); 
        m_pTable-> Columns-> Append( "Column3",ADOX::adVarWChar,8); 
        m_pCatalog-> Tables-> Append( _variant_t((IDispatch *)m_pTable));
  
 }
 catch(_com_error &e) 
 { 
       AfxMessageBox(e.Description()); 
 }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值