查看文章 |
最近做课程设计需要为一个已存在的数据库文件(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 ------------------------------------------------------------------------------------------------------------------------------ 这个方法是无奈之举,如果有错误,或者您有更好的方法,请留言指正,谢谢^_^。 ------------------------------------------------------------------------------------------------------------------------------ 完整工程: |