百度首页 | 百度空间
 
查看文章
 
SQLConfigDataSource注册数据源时指定数据库文件(sql2000)
2008-01-11 17:17

       最近做课程设计需要为一个已存在的数据库文件(HchRoute_Data.MDF)注册数据源。于是在网上找了一下,发现有个SQLConfigDataSource函数可以很方便地为的数据库建立数据源。而且有一个".DBQ"的选项可以在注册数据源指定数据库文件。

       但是我自己实际用时,发现好像使用了",DBQ"选项后程序SQLConfigDataSource注册数据源时总是不成功,只能注册为已存在于企业管理器中的数据库注册数据源,很是郁闷。

      后来我自己想了一个办法解决了这个问题:鉴于sql2000企业管理器中必定存在一个名为master的数据库,我们可以先为此数据库建立一个数据源并联接到该数据库。接下来只要得用此连接,通过执行sql语句,在企业管理器中建立一个数据库,并将其主文件指定为我们想要访问的数据库文件(HchRoute_Data.MDF),最后再为此新建的数据库建立数据源。

      这样,我就间接地完成了注册数据源时指定数据库文件这一目的。

----------------------------------------------------参考代码----------------------------------------------------------- 

       TRY

   {

     CStringCurPath;

     GetModuleFileName(AfxGetInstanceHandle(),CurPath。GetBuffer(MAX_PATH),MAX_PATH);

     CurPath。ReleaseBuffer();

     //获得程序路径

     inti=0,j=i;

     while((i=CurPath。Find("\\",i))!=-1)

     {

      j=i;

      i++;

     }

     CurPath=CurPath。Left(j+1);

     //获得程序所在目录

     TRY

     {

      CDatabasetempdb;

      if(!SQLConfigDataSource(NULL,ODBC_ADD_DSN,"SQLServer",

       "DSN=myhch\0"

       "Description=临时数据源\0"

       "Server=localhost\0"

       "DataBase=master\0"//数据库master是sql自带的

       "Trusted_Connection=YES\0"//信任机制

       ))//为master注册一个临时数据源

       MessageBox("创建master数据源时出错","错误",MB_OK|MB_ICONERROR);

      tempdb。Open(NULL,FALSE,FALSE,"ODBC;DSN=myhch;");//连接数据源

      CStringsql;

      sql。Format("sp_attach_db'MyHchRoute','%s','%s'",CurPath+"HchRoute_Data.MDF",CurPath+"HchRoute_Log.LDF");

      //将程序所在的目录下的数据库文件附加到名为MyHchRoute的数据库中

      tempdb。ExecuteSQL(sql);

     }

     CATCH(CDBException,e)

     {

      //如果已存在MyHchRoute数据库将会出现异常,但无需理会

          //http://hi.baidu.com/皇家救星1985/

      //MessageBox(e->m_strError,"错误",MB_OK|MB_ICONERROR);

     }

     END_CATCH

     

     if(!SQLConfigDataSource(NULL,ODBC_ADD_DSN,"SQLServer",

      "DSN=hch\0"

      "Description=交通车查询\0"

      "Server=localhost\0"

      "DataBase=MyHchRoute\0"

      "Trusted_Connection=YES\0"

      ))//为刚建立的数据库MyHchRoute建立数据源

       MessageBox("创建数据源时出错","错误",MB_OK|MB_ICONERROR);

     db。Open(NULL,FALSE,FALSE,"ODBC;DSN=hch;");//连接数据源

     userdb。Open(NULL,FALSE,FALSE,"ODBC;DSN=hch;UID=hch;");//连接数据源

    

   }

   CATCH(CDBException,e)

   {

     CStringstrMsg="配置数据源时出错,请参阅使用说明";

     MessageBox(strMsg,"错误",MB_OK|MB_ICONERROR);

   }

   END_CATCH

------------------------------------------------------------------------------------------------------------------------------

      这个方法是无奈之举,如果有错误,或者您有更好的方法,请留言指正,谢谢^_^。

------------------------------------------------------------------------------------------------------------------------------

完整工程:

http://download.csdn.net/user/kingstarer


类别:我知道你不知道 | 添加到搜藏 | 浏览() | 评论 (0)
 
最近读者:
 
网友评论:
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
验证码:
 

     

©2008 Baidu