有关VS.NET的安装部署(2)--打包数据库的安装与配置
前面所介绍的有关VS.NET的安装部署,只是简单的打包应用程序,往往在制作安装包时需要连数据库的安装一起打包到安装程序中.而且还要自定义一个用户界面,让用户在安装时输入数据库的配置信息(服务器名,数据库名,登陆用户,密码),用安装程序创建数据库,同时配置应用程序的配置文件.如:连接字符串.
一,首先看一篇有关自定义安装程序的介绍
二,下载上面文章提供的程序示例,将其中的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