首页 新闻 会员 周边 捐助

winform打包程序卸载的问题

0
悬赏园豆:5 [已关闭问题] 关闭于 2014-05-22 16:09

我在卸载自己打包的安装程序时提示这个请问怎么在卸载之前就先将数据库分离或删除呢?我已经重写了卸载方法Uninstall(),但该方法中的第一句提示信息就没运行,就提示了上图中的内容

  ///<summary>
/// 卸载应用程序
///</summary>
///<param name="savedState"></param>
public override void Uninstall(IDictionary savedState)
{
try
{
if (MessageBox.Show("你确定要移除数据库吗?", "确认", MessageBoxButtons.YesNo)
== DialogResult.Yes)
{
//指定DB名称
string dbname = "cjgl";
try
{
//在指定的DB上运行 删除DB的sql语句.
this.DropDataBase(dbname);
}
catch
{
MessageBox.Show(string.Format("删除 [{0}] 数据库失败. 请手动删除."), dbname);
}
}
base.Uninstall(savedState);
}
catch (Exception e)
{
MessageBox.Show(e.Message);
}
}

 

View Code
 string sqlDetach = "EXEC sp_detach_db @dbname='{0}'";//分离某数据库
string sqlAttach = " EXEC sp_attach_db @dbname='{0}',@filename1='{1}',@filename2='{2}'";//附加某数据库,并指定数据库文件.mdf和.ldf的路径
string sqlDrop = "drop database {0}";//删除某数据库
//string sqlAlter = "ALTER DATABASE {0} SET OFFLINE WITH ROLLBACK IMMEDIATE";//断开某数据库的所有用户连接

///<summary>
/// 执行sql脚本
///</summary>
///<param name="_databaseName"></param>
///<param name="_sql"></param>
private void ExecuteSql(string _databaseName, string _sql)
{
string server = this.Context.Parameters["server"];//服务器名称
string uid = this.Context.Parameters["user"];//SQlServer用户名
string pwd = this.Context.Parameters["pwd"];//密码
string path = this.Context.Parameters["targetdir"];//安装目录
string strSql = "server=" + server + ";uid=" + uid + ";pwd=" + pwd + ";database=master";//连接数据库字符串
//初始化一个sql connection对象
this.conn = new SqlConnection();
this.conn.ConnectionString = strSql;
//初始化一个sql command对象
SqlCommand command = new SqlCommand(_sql, conn);
command.Connection.Open();
//因为调用该方法之前,是在master 系统数据库上面运行,所以需要使用更换数据库.
command.Connection.ChangeDatabase(_databaseName);
try
{
command.ExecuteNonQuery();
}
finally
{
command.Connection.Close();
}

}


///<summary>
/// 删除数据库
///</summary>
///<param name="conn">连接数据库,连接master系统数据库</param>
///<param name="DataName">数据库名字</param>
public void DropDataBase(string DataName)
{
try
{
this.ExecuteSql("master", string.Format(sqlDrop, DataName));
MessageBox.Show("数据库删除成功!点击确定继续");
}
catch (Exception e)
{
MessageBox.Show("数据库删除失败!" + e.Message + "\n\n" + "您可以手动删除数据库");
}
}

附:上面的删除数据库的方法在按钮单击事件中测试通过

盛行天宇的主页 盛行天宇 | 初学一级 | 园豆:162
提问于:2011-12-23 10:37
< >
分享
所有回答(4)
0

用完数据库后随手close下不行么?

Rookier | 园豆:652 (小虾三级) | 2011-12-23 10:49

试过了的,不行

支持(0) 反对(0) 盛行天宇 | 园豆:162 (初学一级) | 2011-12-23 11:21
0

.net 技术中心 qq群:203848576 技术交流 于解决方案

leexiang_home | 园豆:197 (初学一级) | 2011-12-23 11:03
0
 string dbname = "MyPark";
//string connectionString = "Data Source=" + server + ";Initial Catalog=master;User ID=" + user + ";Password=" + pwd;
string connectionString = @"Data Source=.\SQLEXPRESS;Initial Catalog=master;Integrated Security=True";

try
{

using (SqlConnection conn = new SqlConnection(connectionString))
{
conn.Open();
System.Reflection.Assembly asm = System.Reflection.Assembly.GetExecutingAssembly();
string path = targetdir;
string SqlString = "DROP DATABASE " + dbname;

SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandText = SqlString;
int result = cmd.ExecuteNonQuery();

conn.Close();
}

this.DialogResult = DialogResult.OK;
this.Close();
}
catch
{
this.Close();
}
马战鹏 | 园豆:432 (菜鸟二级) | 2011-12-23 14:23

你好,上面代码中的this.Close();其中this指的什么呢?

支持(0) 反对(0) 盛行天宇 | 园豆:162 (初学一级) | 2011-12-23 16:12

@盛行天宇: 

看到他this.Close();上面的

this.DialogResult = DialogResult.OK;

这行代码,你应该就知道指什么了

支持(0) 反对(0) ERS | 园豆:728 (小虾三级) | 2011-12-23 16:21

@盛行天宇: 就是弹出的那个窗体啊。

支持(0) 反对(0) 马战鹏 | 园豆:432 (菜鸟二级) | 2011-12-23 16:27
0

请问你的问题解决了吗?楼主

xxf881228 | 园豆:202 (菜鸟二级) | 2012-10-11 17:18
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册