首 页 网络编程
网页制作 图形图象 操作系统 冲浪宝典
软件教学 认证考试

网络安全 网络办公 行业资讯 评测对比
您当前位置:站长天空 -> 网络编程-> 数据库教程
数据库安装包的制作(参考MSDN)-.NET教程,安装和部署
作者:网友供稿 点击:381
推荐
西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!可在线rar解压,自动数据恢复设置虚拟目录等.免费赠送访问统计,企业邮局.Cn域名注册10元/年,自助建站480元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金
站内搜索
文章页数:[1] 
由于主要是参考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();
            }
            finally
            {
                command.connection.close();
            }
        }


        protected void adddbtable(string strdbname)
        {
            try
            {
                executesql("master","create database "+ strdbname);
                executesql(strdbname,getsql("sql.txt"));
                executesql("master","exec sp_addlogin myoamaster,myoamaster,"+strdbname+",null,null");
                executesql(strdbname,"exec sp_grantdbaccess myoamaster, myoamaster");
                executesql(strdbname,"exec sp_addrolemember db_owner,myoamaster");
            }
            catch(exception ex)
            {
                console.write("in exception handler :"+ex.message);
            }
        }

        public override void install(system.collections.idictionary statesaver)
        {
            base.install(statesaver);
            adddbtable(this.context.parameters["dbname"]);
        }

首先介绍getsql函数:
他的作用是把sql.txt(作为参数)的sql语句一行一行读出来,但是要注意一点:
和msdn不同的,如果有中文的话,一定要加上
streamreader reader = new streamreader(strm,system.text.encoding.default);
而不是msdn的streamreader reader = new streamreader(strm);
否则中文全部是乱码:(

executesql是一个通用函数,方便以后调用

程序的精髓在adddbtable这个函数上面,也是困扰我最久的一个函数:
首先,
executesql("master","create database "+ strdbname);
创建一个数据库,strdbname为传入参数,以后介绍。
executesql(strdbname,getsql("sql.txt"));
调用getsql函数,读sql.txt内容,并执行。
由于安装之后要与.net系统融合,所以下面执行的sp是一个具体的情况。
首先,我的系统在web.config里使用的是mymoamaster用户,密码也为myoamaster,这样可以避免sa密码对于每个用户不同这个问题。

executesql("master","exec sp_addlogin myoamaster,myoamaster,"+strdbname+",null,null");  这个sp的主要作用是为新数据库创建一个登录
executesql(strdbname,"exec sp_grantdbaccess myoamaster, myoamaster");  这个语句的作用的为刚才这个登录指定数据库访问权限
executesql(strdbname,"exec sp_addrolemember db_owner,myoamaster");  这个sp的作用是指定myoamaster有db_owner的权限

ps:这几个sp的具体详细功能大家可以参考sql server的联机帮助。
完成了上面的东西后,万里长城就剩下一点点了。呵呵:)

首先,添加一个新项目(废话,当然是安装项目了,呵呵)命名也随意,选择应用程序文件夹,右键添加点击项目输出,,选择主输出。
右键安装项目,视图,用户界面,添加文本框a,作用是给你创建的数据库命名。对话框的文字就随意改了,edit1porperty改成和msdn上一样的customtexta1(这个我也不知道是不是一定要这样,还没有时间测试)然后把edit2,3,4都隐藏掉。
右键安装项目选择视图点击自定义操作 ,选中安装结点,单击添加双击应用程序文件夹在主输出来自...(活动)上右键属性customactivedata属性修改为/dbname=[customtexta1](这个相信你也看出来了,在上面那几个函数里使用的strdbname就是这个了。呵呵

然后编译执行。是不是很酷呢。呵呵


ps:好久没有写过东西了,写得不好,希望大家不要介意。有什么疑问或者可以改进的地方希望大家提出。
特别感谢:zee,cnet,amjn等其他一些大侠对我提供的帮助。再次感谢。使得我的项目顺利完成。

贴这些出来,希望对新手有用,至于高手,就随便看看好了。呵呵:)

文章整理:站长天空 网址:http://www.z6688.com/
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

文章页数:[1] 


放大字体显示 缩小字体显示 打印文章 推荐给朋友
热门文章
·jsp留言板源代码4-JSP教程,数据库相关
·“脱衣秀”泛滥 四川打击淫秽色情视频聊天室
·c#中使用 crystal reports (水晶报表)的打包和部署问题-.NET教程,报表/图形/Office
·MDAC2.8 下载!-ASP教程,数据库相关
·数据库安装包的制作(参考MSDN)-.NET教程,安装和部署
·asp讲座之七:asp与数据库(二)
·深度和广度优先分油问题(C#实现)-.NET教程,C#语言
·C#在状态栏中,自绘进度条,-.NET教程,C#语言
·怎么清除sql server日志
·C#中的接口-.NET教程,C#语言
最新文章
·sql server 2005 ce基础概要_数据库教程
·用flash as代码制作按钮弹出窗口_flash教程
·alexa:戏曲性地调整_alexa排名
·google也推出域名注册_google推广
·技巧总结:div中class与id的区别及应用_css教程
·windows vista命令runas.exe全解析_windows vista
·photoshop将美女照片处理成仿古斑驳油画_photoshop教程
·百度主题推广代码的完全解析-知己知彼_网赚技巧
·你的google adsense帐号是否被人盗用?_网赚技巧
·如何挑出google adsense中单价极低的广告商_网赚技巧
相关主题
  • 数据库安装程序-.NET教程,数据库应用
  • 西部数码虚拟主机

    友情链接
    CNNIC 西部数码
    万网 自助建站
    虚拟主机 asp空间
    域名注册 域名
    域名申请 主页空间
    论坛空间 网站空间
    国际域名 虚拟空间
    空间租用 DDOS防火墙
    成都主机托管 四川主机托管
    主机租用 服务器租用
    网站目录 自助建站
    虚拟主机 网址大全
    软件下载
    自助链接
    虚拟主机资讯 特价虚拟主机
    版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
    关于我们:站长天空:专业提供最新的站长资讯、在线教程、虚拟主机权威评测、虚拟主机性能对比、网站制作教程,开发教程,站长工具。包括网页制作教程、冲浪宝典、编程参考、操作系统、软件教学、行业动态等。
    特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
    发表评论 打印  刷新     关闭