动态数据生成解决方案

 

实现原理:

网页:使用StreamReader读取模板,替换里面的关键词, StreamWriter生成新页。

程序:使用类Codedom生成程序文件。

实现:具体如下
动态網頁及程序生成解决方案

输入数据库名,用户名和密码进入系统。程序使用Form验证,所有未经过验证转到此画面。

Web.config配置如下:

动态網頁及程序生成解决方案      <authentication mode="Forms">
动态網頁及程序生成解决方案        
<forms loginUrl="conn.aspx"
动态網頁及程序生成解决方案               protection
="All"
动态網頁及程序生成解决方案               timeout
="30"
动态網頁及程序生成解决方案               name
=".ASPXAUTH" 
动态網頁及程序生成解决方案               path
="/"
动态網頁及程序生成解决方案               requireSSL
="false"
动态網頁及程序生成解决方案               slidingExpiration
="true"
动态網頁及程序生成解决方案               defaultUrl
="Pages_Creator.aspx"
动态網頁及程序生成解决方案               cookieless
="UseDeviceProfile"
动态網頁及程序生成解决方案               enableCrossAppRedirects
="false" />
动态網頁及程序生成解决方案      
</authentication>
动态網頁及程序生成解决方案      
<authorization>
动态網頁及程序生成解决方案        
<deny users="?" />
动态網頁及程序生成解决方案      
</authorization>
动态網頁及程序生成解决方案

以下是数据库服务名,可以为IP地址。WUSF\DAT为我的数据库所在的服务器名称。

动态網頁及程序生成解决方案  <appSettings>
动态網頁及程序生成解决方案    
<add key="Connecting" value="WUSF\DAT" />
动态網頁及程序生成解决方案  
</appSettings>

数据验证成功后转入程序生成画面,显示所有用户具有权限的数据库和对应的表,此部分功能涉及到相关SQL语句及程序如下。

动态網頁及程序生成解决方案
SQL:

动态網頁及程序生成解决方案--Sql Server 关于获取数据库名,表名及字段名的几个语句。
动态網頁及程序生成解决方案
所有的库名
动态網頁及程序生成解决方案
select [name] from master.dbo.sysdatabases where dbid>6
动态網頁及程序生成解决方案
动态網頁及程序生成解决方案
--当前库下的所有表名
动态網頁及程序生成解决方案
use hischeck
动态網頁及程序生成解决方案
select[name]from sysobjects  where  xtype='U' 
动态網頁及程序生成解决方案
动态網頁及程序生成解决方案
--当前表下的所有字段名
动态網頁及程序生成解决方案
select column_name from information_schema.columns  where   table_name='hcempno' 
动态網頁及程序生成解决方案
select column_name from   information_schema.columns   where   table_name='hcempno'    
动态網頁及程序生成解决方案
select [name] from   syscolumns   where   id   =   object_id('hcempno')  
动态網頁及程序生成解决方案

C#:

动态網頁及程序生成解决方案            CreatePage tmp = new CreatePage();//数据库操作类
动态網頁及程序生成解决方案
            this.lbdbname.DataSource = tmp.dbDataName(ConnectionString);
动态網頁及程序生成解决方案            
this.lbdbname.DataTextField = "name";
动态網頁及程序生成解决方案            
this.lbdbname.DataValueField = "name";
动态網頁及程序生成解决方案            
this.lbdbname.DataBind();
动态網頁及程序生成解决方案
动态網頁及程序生成解决方案
//得到第一个数据库名,用于初始化右边下拉列表。
动态網頁及程序生成解决方案
            this.ddlTable.DataSource = tmp.ddlDataTable(ConnectionString, lbdbname.Items[0].Value);
动态網頁及程序生成解决方案            
this.ddlTable.DataTextField = "name";
动态網頁及程序生成解决方案            
this.ddlTable.DataValueField = "name";
动态網頁及程序生成解决方案            
this.ddlTable.DataBind();
动态網頁及程序生成解决方案
动态網頁及程序生成解决方案
//选择事件,选择左边数据库名,右边得到对应的表名。
动态網頁及程序生成解决方案
        protected void lbdbname_SelectedIndexChanged(object sender, EventArgs e)

生成网页及对应程序代码如下:

范本页:

AddTemplet.config


生成檔C#代码:

 

        }

生成后档及代码:

Aspx:


CS:

图片如下:

动态網頁及程序生成解决方案动态網頁及程序生成解决方案


技术要点:生成网页文件很简单,关键是生成程序代码,
Codedom的使用。

项目总结:实际上开发这样的程序并无实际上的意思(除非简单的数据操作),在实际的项目中,有很复杂的商务逻辑及页面布局。在代码生成方面比较有实际的意义,Codedom不仅可以生成代码,还可以动态编译成exe,dll/。网络上已经有很多代码生成工具,像CodeSmithStu就很不错。

相关文章: