ASP.NET安装和部署中数据库的问题

lanye_purple 2006-11-08 09:39:33
现我在ASP.NET部署数据库时出现这样一个问题..如果sql.txt中遇到有存储过程,安装程序将会出错误..提示错误:ExecuteNonQuery:CommandText 属性尚未初始化 然后数据确实在SQL中存在了..但里面没有内容,表一个都没有. 觉得代码需要改进,麻烦高手指点了(这段代码是网上找的,很多地方都有)

代码如下:

using System;
using System.Collections;
using System.ComponentModel;
using System.Configuration.Install;
using System.IO;
using System.Data.SqlClient;
using System.Reflection;

namespace DBCustomAction
{
/// <summary>
/// DBCustomAction 的摘要说明。
/// </summary>
[RunInstaller(true)]
public class DBCustomAction : System.Configuration.Install.Installer
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.Container components = null;
private string strPass = "";
private string strUser = "";
private string strServer = "";

public DBCustomAction()
{
// 该调用是设计器所必需的。
InitializeComponent();

// TODO: 在 InitializeComponent 调用后添加任何初始化
}

/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if(components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}

#region 组件设计器生成的代码
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
components = new System.ComponentModel.Container();
}


public override void Install(System.Collections.IDictionary stateSaver)
{
//入口
strPass = this.Context.Parameters["strPass"];
strUser = this.Context.Parameters["strUser"];
strServer = this.Context.Parameters["strServer"];
AddDBTable("RequestSys");//RequestSys为数据库名称
}
protected void AddDBTable(string strDBName )
{
try
{
//Create the database.
ExecuteSql("master", "CREATE DATABASE " + strDBName);
// Create the tables.
ExecuteSql(strDBName, GetSql("sql.txt"));
}
catch(Exception ex)
{
throw ex;
}
}

private void ExecuteSql(string DatabaseName , string Sql)
{
SqlConnection conn = new SqlConnection("user id="+strUser+";password="+strPass+";database=master;server="+strServer) ;
SqlCommand Command = new SqlCommand(Sql,conn);
Command.Connection.Open();
Command.Connection.ChangeDatabase(DatabaseName);

try
{
Command.ExecuteNonQuery();
}
catch(Exception ex)
{
throw ex ;
}
finally
{
// Finally, blocks are a great way to ensure that the connection
Command.Connection.Close();
}
}
private string GetSql(string strName)
{
try
{
//' Get the current assembly.
Assembly Asm = Assembly.GetExecutingAssembly();
// Resources are named using a fully qualified name
Stream strm = Asm.GetManifestResourceStream(Asm.GetName().Name + "." + strName);
//Read the contents of the embedded file.
StreamReader reader= new StreamReader(strm);//,System.Text.Encoding.Unicode);
return reader.ReadToEnd();
}
catch
{
return null;
}

}
...全文
367 9 打赏 收藏 举报
写回复
9 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
Lenson_Z 2006-11-17
我也遇到类似的问题!
我的情况是:单独放建立表的SQL语句到SQL.txt可以通过,可以建立表。但是把建立视图(建立相关的表放在建立该视图之前,而且建立视图的SQL语句是正确的),但是出错,结果知识建立数据库,表和视图都无法建立。
解决办法:把建立表的SQL语句单独放在sql.txt;建立视图的SQL语句放在sqlv.txt;先执行sql.txt,再执行sqlv.txt,成功!!
我想你出现这种情况的问题应该是跟我这种情况是一样的,所以可以借鉴该方法。
  • 打赏
  • 举报
回复
lanye_purple 2006-11-08
我现在也是想用这种方式..
那具体应该怎么做..
  • 打赏
  • 举报
回复
hymxtang 2006-11-08
ASP.NET项目安装部署时,我都是先把数据库备份了,再一起打包觉得比较方便
  • 打赏
  • 举报
回复
lanye_purple 2006-11-08
是我没有说清楚,还是怎么地啊...
  • 打赏
  • 举报
回复
lanye_purple 2006-11-08
感谢帮顶..

怎么还是没有人来弄一下啊..
  • 打赏
  • 举报
回复
gezichong 2006-11-08
我帮你顶一下看看
  • 打赏
  • 举报
回复
lanye_purple 2006-11-08
没有人知道吗..

只有这么多分了..感兴趣的也帮忙顶一下啊.
  • 打赏
  • 举报
回复
lanye_purple 2006-11-08
trytoday 发表于2006-07-28 23:33:00 IP: 221.216.166.*
我用的是一种更简单的方法,不论数据库里有什么都无所谓。就是把数据库的备份(或.mdf文件)打包,建立数据库的时候还原(或连接上)就可以了。这样也方便指定数据库新路径。

刚在网上收了一下..上面的方法是我想要的.把数据库的备份或.mdf文件)打包,但这位朋友没有把代码贴出来..有知道的麻烦帮一下..
现在很急...

  • 打赏
  • 举报
回复
lanye_purple 2006-11-08
唉..世道太公了.
发了一天的贴了..都没有人怎么理啊..
  • 打赏
  • 举报
回复
发帖
.NET社区

6.0w+

社区成员

.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • R小R
  • 喵叔哟
加入社区
帖子事件
创建了帖子
2006-11-08 09:39
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。