当前位置:首页
开发技术指南» 文章正文
    引言:
 

 

 ·怎么给文件夹加密    »显示摘要«
    摘要: 请问各位大侠: 在win98/2000/xp下,怎么给文件夹加密? 我想知道的是“自定义文件夹”的那种方式! 同时想问,还有没有其他的方法呀? ......
 ·怎样输入字符串    »显示摘要«
    摘要: 怎样从键盘输入字符串,输入后它保存在哪?然后如何把它输出显示? ......


怎样在Install shield或PB 里直接把数据库附加到SQLSERVER中

怎样在Install   shield或PB   里直接把数据库附加到SQLSERVER中???急~!!

NO.1   作者: piggybank

 
  引入数据库方法:  
  1、假如安装了SQLServer或者客户端工具,就可以用命令行   osql   命令,用   osql   /?   查询帮助,或者看看联机帮助,大概的语法如下:osql   -U   login   id   -P   password   -d   databasename   -Q   "cmdline   query"  
  这里可以用osql执行   restore   database   来还原数据库——注意:备份数据库的时候要把相关的loginid去掉,restore之后用osql调用存储过程重建即可。如果不去掉,restore的时候需要做很多判断和操作,比较麻烦。  
  因此,你可以在   InstallShield   中用   LaunchAppAndWait   来执行   osql;  
  2、写一个COM,或者VBScript,在   InstallShield   中调用来实现上面过程;  
  3、用pb写一段程序专门来进行这个操作,在InstallShield的脚本   function   OnFirstUIAfter()   中调用其实现导入数据库。  
   
  对于以上方法,要说明程序中如何“引入”数据库——还原数据库。由于我不懂pb,可以简单说一下过程。  
  1、制作数据库——备份数据库成为一个文件,备份前去掉该库相关的   login   id,使其没有任何账号和权限可以访问;  
  2、用提供的   loginid   和   password   连接指定的   serverip,或者你用odbc等等;  
  3、注意,该   loginid   必须是   sa   或者相应权限的数据库,因此首先用其创建一个空库——注意判断重名。  
   
  先把当前库转为   master,  
  "USE   master"  
   
  判断该库是否已经存在  
  "IF   EXISTS   (SELECT   name   FROM   master.dbo.sysdatabases   WHERE   name   =   N"   &   gDataBaseName   &   ")   DROP   DATABASE   ["   &   gDataBaseName   &   "]"  
  如果存在,则   drop  
   
  创建空库:  
  "CREATE   DATABASE   "   &   gDataBaseName   &   "   ON   (   NAME   =   "   &   gDataBaseName   &   "_dat,     FILENAME   =   "   &   strDBFilename   &   ",       SIZE   =   4,       MAXSIZE   =   10,       FILEGROWTH   =   1   )   LOG   ON   (   NAME   =   "   &   gDataBaseName   &   "_log,       FILENAME   =   "   &   strDBLogFilename   &   ",       SIZE   =   4,       MAXSIZE   =   10,       FILEGROWTH   =   1   )   COLLATE   Chinese_PRC_CI_AS"  
  这里面需要注意生成的库文件和日志文件放到哪里,库的初始大小和增长情况等等;  
   
  3、用指定的库文件还原该库:  
  "Restore   database   "   &   gDataBaseName   &   "   from   Disk="   &   strDBBackupFilename   &   "   with   move   "   &   gDataBaseName   &   "_data   to   "   &   strDBFilename   &   ",   move   "   &   gDataBaseName   &   "_log   to   "   &   strDBLogFilename   &   ""  
  同样注意:生成的库文件和日志文件放到哪里,库的初始大小和增长情况等等。因为备份环境与安装环境的差异,备份文件中已经记录了这些信息,因此这里需要强制指明。  
  4、创建   login   id   和   相应的权限  
  要弄清楚   sqlserver   的安全机制,有   loginid   才能“连接”数据库服务器,该   id   具备了对特定数据库的特定权限,才能“访问”该“数据库”。因为备份库的时候可能已经记录了login   id等等,因此才要求前期准备工作中删掉这些信息。  
   
  下面的操作是对上面这一要求没有做到的“预防”措施  
  "if   exists(   select   name   from   "   &   gDataBaseName   &   ".dbo.sysusers   where   name="   &   gDataBaseAdmin   &   ")   select   1   else   select   2"  
  判断对该库是否存在指定   loginid   的访问权——即该逻辑库的username,根据返回1或者2得到结果  
  如果存在,可以用   "sp_dropuser   "   &   gDataBaseAdmin   &   ""   删除该   loginid  
  这里也可以对所有对该库的关联账号一律删掉。  
   
  "if   exists(   select   name   from   master.dbo.syslogins   where   name="   &   gDataBaseAdmin   &   ")   select   1   else   select   2"  
  这一步根据结果使用"sp_droplogin   "   &   gDataBaseAdmin   &   ""删除相关   login   id  
  5、最后使用  
  "sp_addlogin   "   &   gDataBaseAdmin   &   ","   &   gDataBasePassWord   &   ","   &   gDataBaseName   &   ""  
  创建   login   id,并关联到该数据库作为默认库。  
  然后使用   sp_adduser   设置该   login   id   对   该库的数据库访问权限。  
   
  ok,完毕。  
   
  这些内容,完全可以写成一个   sql   文件,然后用程序读入来执行。  
  或者写成一个存储过程,然后由程序,或osql读入数据库,然后调用执行。  
  这两种方法,前者需要用程序读取到的变量替换sql文件中的数据库名字等,后者需要传递足够的参数给存储过程。  
   
  最后,如果你的目的不是“把数据库附加到SQLSERVER中”,而是创建一个空库,那最简单就是在sqlserver中对现有库“生成SQL”,另存为一个文件,然后再用程序或者osql创建该库。  
  其中注意的是,osql读入sql文件批量执行多个sql语句,必须分段来写,每句之间加入一句   go   来告诉   sqlserver   分开执行,不能连续执行。  
   
  呵呵,如果你不熟悉   SQLServer别再问下去了,SQLServer   联机帮助中有所有上面提到的语句,不会可以看看联机帮助——简体中文的。我这里给你了基本的思路和语句,你可以自行发挥,有些地方可以换种方式实现。尤其有几个语句已经有新版本了,我这里是两三年前的代码,但可以不用替换,都是兼容的。  
   
  时间有限,随便写了一些,希望对大家有所帮助。

NO.2   作者: andyzq

在pb里调用系统存储过程sp_attach_db即可  
   
  //附加数据库  
  SQLCA.AutoCommit   =   true  
   
  string   ls_path,   ls_name,   ls_database_path,   ls_mdf_name,   ls_ldf_name  
  long   ll_return  
   
  ls_path   =   "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Currentversion\Uninstall\Microsoft   SQL   Server   2000"  
  RegistryGet(ls_path,   "InstallLocation",   RegString!,   ls_name)  
  ls_database_path   =   ls_name   +   "\data\"    
  ls_mdf_name   =   ls_database_path   +   enterprise_Data.MDF  
  ls_ldf_name   =   ls_database_path   +   enterprise_Log.LDF  
   
   
  DECLARE   up_add_database   PROCEDURE   FOR   sp_attach_db  
                  @dbname   =   enterprise,  
      @filename1   =   :ls_mdf_name,  
                  @filename2   =   :ls_ldf_name;  
      EXECUTE   up_add_database;  
      close   up_add_database;  
  commit;  
 

NO.3   作者: piggybank

楼上说的符合楼主字面要求,不知道是不是楼主需要的?  
   
  sp_attach_db  
  将数据库附加到服务器。  
  注意哦:只应对以前使用显式   sp_detach_db   操作从数据库服务器分离的数据库执行   sp_attach_db。  
   
  呵呵,这指的是对一个数据库的物理存储的文件进行拆分和“还原”,前提是该库已经存在,且表和数据类型、数据验证等一致。我说的是用于安装到其它服务器上的“备份”/“还原”,或者在安装程序中“创建库”。


    摘要: 我想用webservice开发一个类似于股票走势的web服务,向其他网站提供这种服务。 请问,这种方式开发出来的服务叫不叫中间件,可不可以归入中间件范畴! 我们在项目申报时候遇到这个问题。 ......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE