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

动态数据生成解决方案

 

实现原理:

网页:使用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)
        
{
            CreatePage tmp 
= new CreatePage();
            
this.ddlTable.DataSource = tmp.ddlDataTable(ConnectionString, this.lbdbname.SelectedItem.Value);
            
this.ddlTable.DataTextField = "name";
            
this.ddlTable.DataValueField = "name";
            
this.ddlTable.DataBind();
        }

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

范本页:

AddTemplet.config


生成檔C#代码:

 

生成后档及代码:

Aspx:


CS:

图片如下:


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

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

原文地址:https://www.cnblogs.com/cnaspnet/p/560826.html