做了一个安装包,里面包含SQL Server数据库文件,添加了自定义操作,安装到最后时居然弹出对话框.对话框信息"Installutil 执行每个给定程序集中的安装程序......",我根本没加入Installutil命令安装Assembly,感觉莫名奇妙,接着安装回滚,安装不成功。请问是什么原因。
解决方案 »
- js调用linkbutton的oncommand事件
- DetailView在单击编辑后如何取值??
- FreeTextBox 如何绑定后台的内容到前台显示
- 阿里妈妈广告问题
- 使用Ajax ModalPopupExtender控件问题
- 这个时间怎么格式化成2006-8-2?strTmp4 = ds3.Tables["appeal_question"].Rows[0]["question_date"].ToString();
- 请问有没有好的测试软件 或 方法 可以用来 测试 C# windows服务的
- asp.net的初学者进来
- 大家来说说做完WEB项目以后,是如何发布的?
- 关于.NET的编译
- 上传文件转换成gif格式
- asp.net dataview的两个问题
http://topic.csdn.net/t/20050113/17/3723464.html
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration.Install;
using System.Reflection;
using System.IO;
using System.Data;
using System.Data.SqlClient;
using System.Windows.Forms; namespace InstallDB
{
[RunInstaller(true)]
public partial class DBInstaller : Installer
{
public DBInstaller()
{
InitializeComponent();
}
private string GetSql(string sqlFileName)
{
try
{
string path = this.Context.Parameters["targetdir"] + sqlFileName;
FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read);
StreamReader reader = new StreamReader(fs, System.Text.Encoding.Default);
return reader.ReadToEnd();
}
catch (Exception ex)
{
Console.Write("In GetSql:" + ex.Message);
throw ex;
}
}
private void ExecuteSql(string dbName, string sql)
{
SqlConnection conn = new SqlConnection();
conn.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 cmd = new System.Data.SqlClient.SqlCommand(sql, conn);
try
{
cmd.Connection.Open();
cmd.Connection.ChangeDatabase(dbName);
cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
Console.Write("In exception handler :" + ex.Message);
}
finally
{
cmd.Connection.Close();
}
} protected void AddDBTable(string dbName)
{
try
{
ExecuteSql("master", "CREATE DATABASE " + dbName);
ExecuteSql(dbName, GetSql("sql.txt"));
ExecuteSql("master", "exec sp_addlogin 'myoamaster','myoamaster','" + dbName + "',Null,Null");
ExecuteSql(dbName, "EXEC sp_grantdbaccess 'myoamaster', 'myoamaster'");
ExecuteSql(dbName, "exec sp_addrolemember 'db_owner','myoamaster'");
}
catch (Exception ex)
{
Console.Write("In exception handler :" + ex.Message);
}
} private void CreateDatabase(string dbName, string strMdf, string strLdf)
{
try
{
string connString = string.Format("server={0}; user id={1}; password={2}; Database=master", this.Context.Parameters["server"], this.Context.Parameters["user"], this.Context.Parameters["pwd"]);
SqlConnection conn = new SqlConnection(connString);
//EXEC sp_detach_db @dbname = 'BX_FreightMileage_2'//需要先将数据库分离出来
string sql = "EXEC sp_attach_db @dbname = '" + dbName + "', @filename1 = '" + strMdf + "',@filename2='" + strLdf + "'";
MessageBox.Show(sql);
SqlCommand cmd = new SqlCommand(sql, conn); conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
Console.Write("In exception handler :" + ex.Message);
} }
public override void Install(System.Collections.IDictionary stateSaver)
{
base.Install(stateSaver);
//AddDBTable(this.Context.Parameters["dbname"]);
string dbName = this.Context.Parameters["dbname"];
string strMdf = this.Context.Parameters["datapath"] + "AsiaAssetCRM.mdf";
string strLdf = this.Context.Parameters["datapath"] + "AsiaAssetCRM_log.ldf";
CreateDatabase(dbName, strMdf, strLdf);
}
}}