使用MFC+ADO+SQL2008(Access)如何动态创建数据库和表

来源:互联网 发布:造价师工程师网络教育 编辑:程序博客网 时间:2024/05/20 11:52

           SQL要动态创建数据库,MFC中编程实现方法是:首先连接master数据库,然后查询sysdatabases表中是否存在需要创建的数据库名,如果有则不用创建,否则进行新数据库的创建,新数据库的创建直接执行SQL语句即可。例子代码如下:

void CMethodTestDlg::OnBnClickedCtreateDatabase()
{
 // TODO: 在此添加控件通知处理程序代码
 CAdoConnection connect;
 CAdoRecordSet recordSet;
 connect.Disconnect();
 if (connect.Connect(GetDatabaseConnectionStringMaster()))
 {
  LogMessage("连接系统数据库master成功");
  m_DataBaseName="TestData";
  UpdateData(FALSE);
  //检测数据库是否存在  存在则不创建。否则创建新数据库
  recordSet.SetAdoConnection(&connect);
  CString strSQL;

  _variant_t   RecordsAffected;
  char strcon[255];
  int tempSectionID;

  UpdateData(TRUE);
  strSQL.Format("select * from sysdatabases where name='%s'",m_DataBaseName);
  recordSet.Open(strSQL);
  if (recordSet.GetRecordCount()==0)
  {
   LogMessage("此数据库不存在,此需要新创建此数据库");
   //创建新数据库 TestCCIM
   strSQL=CString("create database TestData")+
    CString(" on")+
    CString("(")+
    CString("name='TestData_data',")+
    CString("filename='D:\\DataBase\\TestData_data.mdf',")+
    CString("size=10,")+
    CString("filegrowth=20%")+
    CString(")")+
    CString("log on")+
    CString("(")+
    CString("name='TestData_log',")+
    CString("filename='D:\\DataBase\\TestData_log.ldf',")+
    CString("size=3,")+
    CString("maxsize=20,")+
    CString("filegrowth=10%")+
    CString(")");
   sprintf(strcon,"%s",strSQL);
   LogMessage(strcon);
   connect.GetConnection()->Execute(strcon,&RecordsAffected,adCmdText);
  }
  else
  {
   LogMessage("此数据库存在,则不需要进行创建");
  }
 }
 else
 {
  LogMessage("连接系统master数据库失败");
 }
}

上述就完成了数据库的新建过程,如果要对新的数据库进行表的创建,则需要重新连接新建的数据库,然后执行SQL语句创建相应的表。

后续会继续学习如何动态创建access数据库,以及使用

下面动态创建access数据库的方法:

#import "C:/Program Files/Common Files/system/ado/msadox.dll"

void CMethodTestDlg::OnBnClickedCreateAccess()
{
 // TODO: 在此添加控件通知处理程序代码
 CString strcnn = "Provider='Microsoft.JET.OLEDB.4.0';Data source =C:\\Demo.mdb";

 HRESULT hr = S_OK;
//  CString strcnn(_T("Provider=Microsoft.JET.OLEDB.4.0;Data source = "));
//  strcnn+=Path;
 try 
 {
  ADOX::_CatalogPtr m_pCatalog = NULL;
  hr = m_pCatalog.CreateInstance(__uuidof (ADOX::Catalog));
  if (FAILED(hr))
  {
   _com_issue_error(hr);
  }
  else
  {
   m_pCatalog->Create(_bstr_t(strcnn)); //Create MDB
  }
  m_result_str="创建Access数据库成功";
  UpdateData(FALSE);
 }
 catch(_com_error &e)
 {
  AfxMessageBox(_T(e.Description()));
 }

}