把要做的事情都写成SQL脚本,然后在安装程序里面用isql.exe执行脚本,OK

解决方案 »

  1.   

    也就是说在打包时要同时把isql.exe打进去
      

  2.   

    不用把isql.exe 打包。在已经安装MS SQLServer 的机器上,isql.exe执行路径已经在系统的环境变量里。片段代码如下: szCmdDB  = "\"CREATE DATABASE [MyDatabase] ON (NAME = N'MyDatabase_Data', FILENAME = N'" + INSTALLDIR^"Data\\MyDatabase_Data.MDF' , SIZE = 1, FILEGROWTH = 1) LOG ON (NAME = N'MyDatabase_Log',FILENAME = N'" + INSTALLDIR^"Data\\MyDatabase_Log.LDF' , SIZE = 1, FILEGROWTH = 1)\"" ;
    szCmdLine = "/U " + svSQLusr + " /P " + svSQLpwd + " /S " + svSQLsvr+" /Q " + szCmdDB ; if (LaunchAppAndWait("isql.exe", szCmdLine,WAIT) < 0) then
    MessageBox ("数据库创建失败!",SEVERE);
    endif;  
    另外我也有一个问题请教:
    系统安装完后,如何给目录设置权限?例如:系统被安装在NTFS格式分区上,新建立的文件夹的权限没有完全开放,而该系统必须对其中某个文件夹的文件进行读写操作。。如何解决???请教!
      

  3.   

    注意 szCmdDB = ....  跟 szCmdLine = .....是独立的两行
      

  4.   

    其他的倒入数据操作可以使用批处理来完成。szCmdBat  =  svSQLsvr + " " + svSQLusr + " " + svSQLpwd;
    if(LaunchAppAndWait(SUPPORTDIR^"Install.bat",szCmdBat,WAIT)) then
    MessageBox("无法初始化数据库!",SEVERE);
    endif;
    将 svSQLsvr(数据库IP、主机名) 、svSQLusr(数据库登录用户)、svSQLpwd(数据库登录密码) 做为 Install.bat 的三个参数。
      

  5.   

    以上方法只是把数据库安装上了~
    数据呢???~
    还有~
    我在用户的机器上怎样得到sqlserver的登录账号及口令~
    因为实际上用户的sqlserver可能已经被修改了sa的口令~
      

  6.   

    如果有数据,最好是附加数据库,调用存储过程:
    sp_attach_db_file,大概是这样写的吧。
      

  7.   

    sp_attach...具体忘记是怎么拼写的,可以查一下联机文档的索引。
    但我觉得这种方法不可取,我遇见过N多的问题。高低版本、语言的问题我是写一个 Install.bat 的
    1、先用isql 执行一个初始化数据库结构的 InitialDb.sql,
    2、再用 bcp 倒数据文件快速稳定,没有语言和版本的障碍,呵呵(会出现msdos窗口)让程序在用户机自动获取数据库的用户名和密码是不太现实的,可以在安装的时候给提供用户输入界面,但我不知道怎么做比较科学。我现在是假设管理员输入的用户名和密码是正确的,呵呵,很不健壮还有一个笨办法,将用户输入的sqlServerName, sqlUserName, sqlPassword 使用 ADO.Connection 对象来验证,呵呵,可能要自己写一个组件,工作量很小。我想SQLMOD应该自己有验证的方法,我不知道如何做:)
      

  8.   

    为了避免有MSDOS窗口出现~
    我还是用c#写一个应用~
    应用中可以使用t-sql的restore方法将备份文件还原进指定的数据库服务器,这样的方法可靠多了~
    而且将服务器名称及口令让用户输入~这样就可以确定服务器的地点和进入信息,把这些信息保存到某个地方(例如注册表)~
    主安装是采用installshield调用此应用即可(launchappandwait)~
    我已经调试通过~
    很稳定~
      

  9.   

    这方法不错,呵呵!!!
    LaunchAppandWait 是可以调用任何应用的哦  :)restore 有没有数据库版本、语言方面的障碍?
      

  10.   

    restore的时候分不同版本的sql server即可,至于版本嘛~
    让用户选择吧~
    我不想那么操心~哈哈!!~