如题,我的程序是用sql-server数据库来操纵数据的,在发布程序的时候,想做一个自动添加数据库的程序,让用户可以直接运行这个程序,就可以在ODBC里注册数据源并且把数据库加到服务器上,而不必去操作sql-server来实现安装数据库,谢谢各位了!!!!!!

解决方案 »

  1.   

    编写一个添加数据库的脚本,由安装程序调用isql命令执行,ok!
      

  2.   

    在目的机数据库中创建数据库,用一样的库名称,然后将数据库文件直接复制到目的机的数据库文件目录下.文件目录一般在SQL Server安装目录下或者数据目录下的\MsSql\MSSQL\Data\子目录下。注意要复制两个文件,数据文件和日志文件,文件名是一样的。
      

  3.   

    下面是用程序注册ODBC的SQL数据源,关于要动态加载到服务器的,没有弄过,不敢言。在发布与数据库相关的软件时,如果程序是用ODBC方式访问数据库,则需要在软件安装时创建ODBC数据源。
    ODBC数据源的一些信息都存放在注册表中。
    HKEY_LOCAL_MECHINE\Software\ODBC\ODBCINST.INI
    从此键下可得知系统是否已经安装SQL Server驱动程序
    HKEY_LOCAL_MECHINE\Software\ODBC\ODBC.INI
    从此键下可得知系统已经建立的数据源.
    实现函数如下:
    //////////////////////////////////////////////////////////////////
    //Function:  MakeSQLServerODBCDSN
    //
    //Purpose: 配置SQL Server数据源
    //Parameters:
    //  [in]
    //   strDBServer: 数据库所在主机
    //   strDBName:  数据库名称
    //   strDSN:   数据源名称
    //   strUID:   登陆用户
    //Return Value:
    //  -1: 没有安装SQL Server驱动程序
    //  -2: 其他错误
    //   0: 成功
    //////////////////////////////////////////////////////////////////
    int MakeSQLServerODBCDSN(LPCTSTR strDBServer,LPCTSTR strDBName,LPCTSTR strDSN,LPCTSTR strUID)
    {
     BOOL  bInstallDriver=TRUE;
     CRegKey  regKey; LONG lRet=regKey.Open(HKEY_LOCAL_MACHINE,"Software\\ODBC\\ODBCINST.INI\\SQL Server");
     if(lRet!=ERROR_SUCCESS)
     {
      bInstallDriver=FALSE;
     }
     else
     {
      char  szDirverPath[MAX_PATH]="";
      DWORD  dwCount=100;
      lRet=regKey.QueryValue(szDirverPath,"Driver",&dwCount);
      if((lRet!=ERROR_SUCCESS)||(dwCount<1))
      {
       DWORD dwErr=GetLastError();
       bInstallDriver=FALSE;
      }
      regKey.Close();
     }
     if(!bInstallDriver)
     {
      return -1;
     }
     CString  strKeyValueName="Software\\ODBC\\ODBC.INI\\";
     strKeyValueName+=strDSN;
     lRet=regKey.Create(HKEY_LOCAL_MACHINE,strKeyValueName);
     if(lRet!=ERROR_SUCCESS)
     {
      return -2;
     }
     regKey.SetValue(strDBName,"Database");
     regKey.SetValue("SQLSrv32.dll","Driver");
     regKey.SetValue(strDBServer,"Server");
     regKey.SetValue(strUID,"LastUser");
     regKey.m_hKey=HKEY_LOCAL_MACHINE;
     regKey.SetKeyValue("Software\\ODBC\\ODBC.INI\\ODBC Data Sources","SQL Server",strDSN);
     regKey.Close();
     return 0;
    }