有关VS.NET的安装部署(2)--打包数据库的安装与配置

    前面所介绍的有关VS.NET的安装部署,只是简单的打包应用程序,往往在制作安装包时需要连数据库的安装一起打包到安装程序中.而且还要自定义一个用户界面,让用户在安装时输入数据库的配置信息(服务器名,数据库名,登陆用户,密码),用安装程序创建数据库,同时配置应用程序的配置文件.如:连接字符串.

一,首先看一篇有关自定义安装程序的介绍

     自定义MSI的安装

二,下载上面文章提供的程序示例,将其中的CustomSteps直接加载到自己的解决方案中,即可使用.所要修改的只是script目录下的脚本文件.(修改成你要创建数据库的脚本),添加此程序的主输出到安装程序的'应用程序文件夹'中.(最好在这个文件夹中新建两个文件夹,bin和install,bin里面放你的应用程序的输出文件,install里面放customSteps的输出文件)

三.右键安装程序项目==>视图==>用户界面

     右键'启动'==>添加对话框==>文本框(A),上移到第二个位置.

     编辑文本框(A)的属性:

      BinnerText:数据库参数

      BodyText :请配置用于创建数据库的一些参数,每项都必须填写.

      Edit1Label:服务器名称:

      Edit1Property:SERVER_NAME

      Edit1Value:[ComputerName]

      Edit2Label:要创建的数据库名称:

      Edit2Property:DATABASE_NAME

      Edit2Value:                         //这里可以填一个默认的数据库名称,也可以不填

      Edit3Label:用户名:

      Edit3Property:USER_NAME

      Edit3Value:sa

      Edit4Label:密码:

      Edit4Property:PASSWORD

然后生成安装程序...over

----------------------------------

另外提供一个自动生成数据库中数据脚本的函数

#region 生成数据表中数据的脚本
  public static  string CreateDataScript(string tableName)
  {

   bool isIdEntity=false;//此表中是否有标识列(自增)
   string commandText = String.Format("SELECT  c.name ,biaoshi=COLUMNPROPERTY( c.id,c.name,'IsIdentity') ,t.name "+
                     "FROM syscolumns c inner join  systypes t on c.xusertype=t.xusertype "+
                                 "WHERE c.ID = OBJECT_ID('{0}')",tableName);

   DataTable fieldList = DBHelper.ExecuteDataTable(CommandType.Text,commandText);//这个方法你自己写吧
            if(fieldList ==null || fieldList.Rows.Count==0)
    return "";

   string getvalue = String.Format("SELECT * FROM [{0}]",tableName);

   DataTable dt = DBHelper.ExecuteDataTable(CommandType.Text,getvalue);
   if(dt==null || dt.Rows.Count==0)
    return "";

   string middle ="";

   for(int j=0;j<dt.Rows.Count;j++)
   {
    string fieldString="",valueString="";

    DataRow dr = dt.Rows[j];

    for(int i=0;i<fieldList.Rows.Count;i++)
    {
     string fieldName = fieldList.Rows[i][0].ToString();
     string biaoshi   = fieldList.Rows[i][1].ToString();
     
     if(biaoshi=="1")//如果此列是标识列
      isIdEntity = true;

     fieldString += "["+fieldName+"],";
     valueString += "'"+dr[fieldName]+"',";
    }
    fieldString = fieldString.Substring(0,fieldString.Length-1);
    valueString = valueString.Substring(0,valueString.Length-1);

                middle+=String.Format("\n INSERT INTO [{0}]({1}) \n VALUES({2})",tableName,fieldString,valueString);
   }

   string script = "";
   if(isIdEntity )
      script = String.Format("SET IDENTITY_INSERT [{0}] ON \n"+middle+
                           "\n\nSET IDENTITY_INSERT [{0}] OFF"+" \n Go",tableName,middle);
   else
    script = "\n"+middle;

            return script;
  }
  #endregion

posted @ 2005-03-13 19:12  meteorcui  阅读(355)  评论(0编辑  收藏  举报