导航
  • 主页
  • ASP
  • .NET Framework
  • Web Services
  • VB
  • VC
  • 图表区
  • 分析与设计
  • 组件/控件开发
  • LINQ
  • 问答

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;
}

}
...全文
346 点赞 收藏 9
写回复
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
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技术社区
创建于2007-09-28

5.8w+

社区成员

.NET技术交流专区
申请成为版主
社区公告
暂无公告