zoukankan      html  css  js  c++  java
  • 动态網頁及程序生成解决方案

    动态数据生成解决方案

     

    实现原理:

    网页:使用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就很不错。

  • 相关阅读:
    【Linux】5.5 Shell运算符
    【Linux】5.4 Shell数组
    【Linux】5.3 Shell字符串
    【Linux】5.2 Shell变量
    【Linux】5.1 Shell简介
    【Linux】3.11 包管理工具(RPM和YUM)
    【Linux】3.10 进程管理(重点)
    【Linux】3.9 网络配置
    【Linux】3.8 Linux磁盘分区、挂载
    【Linux】3.7 定时任务调度
  • 原文地址:https://www.cnblogs.com/cnaspnet/p/560826.html
Copyright © 2011-2022 走看看