日期:2008-06-26  浏览次数:20521 次

由于主要是参考MSDN的,所以这里一些细节不再重复
具体大家可以参考MSDN上一篇叫:
Walkthrough: Using a Custom Action to Create a Database During Installation

的文章。拷贝下来的,地址不知道了,不好意思:)
下面开始说制作的步骤:
首先:新建一个类库,以C#为例。命名随意
然后添加新项,选择安装程序类,命名也随意
然后添加一个名为:sql.txt的文件(注意大小写)点击sql.txt右键,在生成操作中选择嵌入的资源。
sql.txt的内容为从sql server数据库导出的sql语句
这里有个地方需要注意:
一般导出的sql格式是这样的:
CREATE TABLE [dbo].[Company_CanidateAlertList] (
    [JobID] [int] NULL ,
    [JobSeekerID] [int] NULL ,
    [SYS_CreateTime] [datetime] NULL
) ON [PRIMARY]
GO

这时你需要改成:
CREATE TABLE [dbo].[Company_CanidateAlertList] (
    [JobID] [int] NULL ,
    [JobSeekerID] [int] NULL ,
    [SYS_CreateTime] [datetime] NULL
) ON [PRIMARY];
否则不会被C# 执行,也不会报错:)(困扰了我很久,呵呵)

回到安装文件类的视图页面,点击数据库资源管理器,选择master数据库生成一个sqlconnection。这个细节我就不重复了。(注意一点,验证使用window集成)

切换到安装类到代码视图
引入名字空间:
using System.Reflection;
using System.IO;
然后添加以下几个函数,等下一一介绍:
        private  string GetSql(string Name)
        {
            try
            {
                Assembly Asm = Assembly.GetExecutingAssembly();
                Stream strm = Asm.GetManifestResourceStream(Asm.GetName().Name + "."+Name);
                StreamReader reader = new StreamReader(strm,System.Text.Encoding.Default);
                //System.Text.Encoding.ASCII;
                return reader.ReadToEnd();

            }
            catch (Exception ex)
            {
                Console.Write("In GetSql:"+ex.Message);
                throw ex;
            }
        }

        private void ExecuteSql(string DataBaseName,string Sql)
        {
            System.Data.SqlClient.SqlCommand Command = new System.Data.SqlClient.SqlCommand(Sql,sqlConnection1);

            Command.Connection.Open();
            Command.Connection.ChangeDatabase(DataBaseName);
            try
            {
                Command.ExecuteNonQuery();
            }
  &n