《拓文asp.net网站内容管理系统》官方演示站。
 设为首页  
 收藏本站
 作者:黄振安
 QQ:53854651
首 页 开源拓文.NET编程网站编程网页设计图形图像数据库软件工程留言本
    站内搜索:  
您现在的位置: 拓文网络 → .NET编程 → ASP.NET → .net打包自动安装数据库[正文]

热 门 文 章

相 关 文 章
  • ASP.NET性能优化
  • 在.NET框架应用程序中发送电子邮件
  • asp.net开发wap必备:更好的匹配手机设备
  • 用ashx动态生成文件
  • windows 2003下asp.Net站点无法使用用户名+密码的方
  • ASP.NET中17种正则表达式
  • 提高ASP.Net应用程序性能的十大方法
  • 一个通过web.Mail发送邮件的类
  • 在DataGrid里面根据日期的不同显示new图标
  • Asp.Net细节性问题精萃
  • .net打包自动安装数据库
     
    [作者:不详    转贴自:不详    点击数:    更新时间:2006-3-2 15:17:18]

      #region 组件设计器生成的代码
      /// <summary>
      /// 设计器支持所需的方法 - 不要使用代码编辑器修改
      /// 此方法的内容。
      /// </summary>
      private void InitializeComponent()
      {
       components = new System.ComponentModel.Container();
      }
      #endregion
      private  string GetSql(string Name) 
      { 
    //   //调用osql执行脚本
    //
    //   System.Diagnostics.Process sqlProcess = new System.Diagnostics.Process();
    //
    //   sqlProcess.StartInfo.FileName = "osql.exe";
    //
    //   sqlProcess.StartInfo.Arguments = String.Format(" -U {0} -P {1} -d {2} -i {3}db.sql", this.Context.Parameters["user"], this.Context.Parameters["pwd"],"master", this.Context.Parameters["targetdir"]);
    //
    //   sqlProcess.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
    //
    //   sqlProcess.Start();
    //
    //   sqlProcess.WaitForExit() ;//等待执行
    //
    //   sqlProcess.Close();
       try 
       { 
    //    Assembly Asm = Assembly.GetExecutingAssembly();
    //    System.IO.FileInfo FileInfo = new System.IO.FileInfo(Asm.Location);
    //    string path=FileInfo.DirectoryName+@"\"+Name;
        string path=this.Context.Parameters["targetdir"]+Name;
        FileStream fs=new FileStream(path,FileMode.Open,FileAccess.Read,FileShare.Read);
        StreamReader reader = new StreamReader(fs,System.Text.Encoding.Default); 
        //System.Text.Encoding.ASCII;
        return reader.ReadToEnd(); 
       } 
       catch (Exception ex) 
       { 
        Console.Write("In GetSql:"+ex.Message); 
        throw ex; 
       } 
      } 
      private void ExecuteSql(string DataBaseName,string Sql) 
      {
       SqlConnection sqlConnection1=new SqlConnection();
       sqlConnection1.ConnectionString =string.Format("server={0}; user id={1}; password={2}; Database=master",this.Context.Parameters["server"],this.Context.Parameters["user"],this.Context.Parameters["pwd"]);
       System.Data.SqlClient.SqlCommand Command = new System.Data.SqlClient.SqlCommand(Sql,sqlConnection1); 
       try 
       {
        Command.Connection.Open(); 
        Command.Connection.ChangeDatabase(DataBaseName); 
       
        Command.ExecuteNonQuery(); 
       } 
       catch(Exception ex) 
       { 
        Console.Write("In exception handler :"+ex.Message); 
       }
       finally 
       { 
        Command.Connection.Close(); 
       } 
      } 

      protected void AddDBTable(string strDBName) 
      { 
       try 
       {     
        ExecuteSql("master","CREATE DATABASE "+ strDBName);
        ExecuteSql(strDBName,GetSql("sql.txt")); 
        ExecuteSql("master","exec sp_addlogin 'myoamaster','myoamaster','"+strDBName+"',Null,Null");
        ExecuteSql(strDBName,"EXEC sp_grantdbaccess 'myoamaster', 'myoamaster'");
        ExecuteSql(strDBName,"exec sp_addrolemember 'db_owner','myoamaster'");
       } 
       catch(Exception ex) 
       { 
        Console.Write("In exception handler :"+ex.Message); 
       } 
      } 
      public override void Install(System.Collections.IDictionary stateSaver) 
      { 
       base.Install(stateSaver); 
       AddDBTable(this.Context.Parameters["dbname"]); 
      } 
     }
    }
    这里有个sql.txt是数据库的sql脚本,当然可以调用osql来执行sql脚本,其实是一样的。
    打包的时候必须把sql.txt文件加进来,否则不会执行。
    如果你想附加数据库的mdf文件和ldf文件,用下面这段程序:
    private void CreateDataBase(string strSql,string DataName,string strMdf,string strLdf)
      {
       String str;
       SqlConnection myConn = new SqlConnection (strSql);
       //EXEC sp_detach_db @dbname = 'BX_FreightMileage_2'//需要先将数据库分离出来
       str = "EXEC sp_attach_db @dbname = '"+ DataName +"', @filename1 = '"+ strMdf +"',@filename2='"+strLdf+"'";
       SqlCommand myCommand = new SqlCommand(str, myConn);
      
        myConn.Open();
        myCommand.ExecuteNonQuery();
        myConn.Close();
      
      }
    当然打包的时候也要把这两个数据库文件也加进来。


    首页 | 1 | 尾页  共 1 页
     
    winner 打印本页 关闭窗口

         文 章 评 论
    评论人 查看该文章的评论 发表时间
       笔 名* : 0 50分 60分 70分 80分 90分 100分
    评论内容 *: (最多1000字。当前字数:0)


    80 分阿哼内容很不错,但是排版实在有点乱2006-3-29 9:57:42

    - 关于本站 - 网站帮助 - 下载声明 - 友情连接 - 网站地图 -
    Copyright © 2005-2006 myTopWin.Com. All Rights Reserved . [桂ICP备06004496号]