C#分析数据库结构,使用XSL模板自动生成代码

数据库导出工具 根据数据库升级需求,需要导出旧版本数据(sqlserver 6.5),利用c# winfrom写了一个小工具,导出数据。 阅读详情
标题   C#分析数据库结构,使用XSL模板自动生成代码  
关键字   C#分析数据库结构,使用XSL模板自动生成代码  
 
看过一些自动生成"笨"代码的工具,小弟也自己做了一个,使用C#分析数据库结构,并使用XSL来 生成关于数据库表结构的代码,只需修改配置文件dbxmlcfg.xml中OLEDB数据库连接字符串就可 更新数据库连接属性,XSL高手还可以自己来编制代码生成模块, 模板文件为temp_模板名.xsl。 下图为用户界面 
 
按此在新窗口打开图片

####################### index.htm   ##################################
<html>
    <head>
        <TITLE>分析数据库结构,自动生成代码</TITLE>
        <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    </head>
    <frameset cols="237,767" rows="*">
        <frame src="dbxml.aspx">
        <frame name="code" src="about:blank">
    </frameset>
</html>
########################### dbxml.aspx 文件内容,该文件没有C#代码文件 ############# 
<script language="C#" runat="server">
    System.Xml.XmlDocument myCfgXML = new System.Xml.XmlDocument();
    // 获得系统配置字符串
    string GetAppConfig(string strKey)
    {
        System.Xml.XmlElement cfgElement =  myCfgXML.SelectSingleNode ("//setting[@key='" + strKey + "']" )
            as System.Xml.XmlElement ;
        if( cfgElement == null )
            return "";
        else
            return cfgElement.InnerText ;
    }
    
    // 判断字符串是否是空白字符串
    bool isBlankString(string strText )
    {
        if(strText != null)
        {
            int iCount;
            for(iCount=0;iCount<strText.Length ;iCount++)
            {
                if(System.Char.IsWhiteSpace ( strText[iCount])==false)
                    return false;
            }
        }
        return true;
    }
    void Page_Load(Object sender, EventArgs e)
    {
        // 加载系统配置文件
        myCfgXML.Load(this.MapPath(".") + "//dbxmlcfg.xml");
        string strType    = this.Request["type"];
        string strXSL    = "main.xml";
        
        if(strType == null)
            strType = "querytable";
        System.Xml.XmlDocument myDoc = new System.Xml.XmlDocument();
        myDoc.LoadXml("<dbxml />");
        string strConnection = GetAppConfig("conndbxml");
        System.Text.Encoding myEncode = System.Text.Encoding.GetEncoding(936);
                            
        if(isBlankString(strConnection)==false)
        {
            using(System.Data.OleDb.OleDbConnection myConn = new System.Data.OleDb.OleDbConnection(strConnection))
            {
                myConn.Open();
                if(myConn.State == System.Data.ConnectionState.Open )
                {
                    string strSQL = GetAppConfig(strType + "_" + myConn.Provider);
                    if(isBlankString(strSQL)==false)
                    {
                        using(System.Data.OleDb.OleDbCommand myCmd = myConn.CreateCommand())
                        {
                            string strTableName = null;
                            if(strType.Equals("queryfield"))
                            {
                                // 修正SQL语句
                                string strTableList = this.Request.Form["tablelist"];
                                string []strTables = strTableList.Split(",".ToCharArray());
                                strXSL = System.Web.HttpUtility.UrlPathEncode(this.Request.Form["template"] ) + ".xml";
                                strTableList = null;
                                for(int iCount = 0 ; iCount < strTables.Length ; iCount ++ )
                                {
                                    if(isBlankString(strTables[iCount])==false)
                                    {
                                        if(strTableList == null)
                                            strTableList = "'" + strTables[iCount] + "'";
                                        else
                                            strTableList = strTableList + ",'" + strTables[iCount] + "'";
                                    }
                                }
                                strSQL = strSQL.Replace("#tablelist", strTableList);
                                myCmd.CommandText                    = strSQL ;
                                string strLastTableName                = null;
                                string strFieldName                    = null;
                                System.Xml.XmlElement TableElement    = null;
                                System.Data.OleDb.OleDbDataReader myReader = myCmd.ExecuteReader();
                                while(myReader.Read())
                                {
                                    strTableName = myReader[0].ToString().ToUpper();
                                    if(strTableName.Equals(strLastTableName)==false)
                                    {
                                        // 填充表说明元素
                                        strLastTableName    = strTableName ;
                                        TableElement        = myDoc.CreateElement("table");
                                        TableElement.SetAttribute("tablename", strTableName);
                                        myDoc.DocumentElement.AppendChild(TableElement);
                                    }
                                    // 填充字段说明元素
                                    System.Xml.XmlElement FieldElement = myDoc.CreateElement("field");
                                        FieldElement.SetAttribute("fieldname",    myReader[1].ToString());
                                        FieldElement.SetAttribute("fieldtype",    myReader[2].ToString());
                                        FieldElement.SetAttribute("fieldwidth",    myReader[3].ToString());
                                        FieldElement.SetAttribute("isstring",  (myReader[2].ToString().ToUpper().IndexOf("CHAR")>=0?"1":"0"));
                                        strFieldName = myReader[1].ToString();
                                        int iLen = myEncode.GetByteCount(strFieldName);
                                        if(iLen < 20)
                                            FieldElement.SetAttribute("fixname", strFieldName + new string(' ', 20 - iLen));
                                    TableElement.AppendChild(FieldElement);
                                }
                                myReader.Close();
                            }
                            else
                            {
                                // 填充模板列表
                                string [] strFileNames = System.IO.Directory.GetFiles(this.Server.MapPath("."),"temp_*.xml");
                                for(int iCount = 0 ; iCount < strFileNames.Length ; iCount ++ )
                                {
                                    System.Xml.XmlElement tempXML = myDoc.CreateElement("template");
                                    tempXML.SetAttribute("key",System.IO.Path.GetFileNameWithoutExtension(strFileNames[iCount]));
                                    myDoc.DocumentElement.AppendChild(tempXML);
                                }
                                // 填充表名列表
                                myCmd.CommandText = strSQL ;
                                System.Data.OleDb.OleDbDataReader myReader = myCmd.ExecuteReader();
                                System.Xml.XmlElement TableElement = null;
                                while(myReader.Read())
                                {
                                    TableElement = myDoc.CreateElement("table");
                                    myDoc.DocumentElement.AppendChild(TableElement);
                                    strTableName = myReader[0].ToString();
                                    TableElement.SetAttribute("name", strTableName );
                                    TableElement.SetAttribute("count", myReader[1].ToString());
                                    int iLen = myEncode.GetByteCount(strTableName);
                                    if(iLen < 20 )
                                        TableElement.SetAttribute("fixname",strTableName + new string(' ', 20 - iLen));
                                }
                                myReader.Close();
                            }
                        }
                    }
                }
                myConn.Close();
            }
        }
        // 输出文档
        this.Response.ContentType = "text/xml";
        this.Response.ContentEncoding = myEncode ;
        this.Response.Write("<?xml version=/"1.0/" encoding=/"GB2312/" ?>");
        this.Response.Write("<?xml-stylesheet type=/"text/xsl/" href=/"" + strXSL  + "/"?>");
        this.Response.Write(myDoc.DocumentElement.OuterXml);
    }
</script>

文件 dbxmlcfg.xml内容   

--------------------------------------------------------------------------------

<?xml version="1.0" encoding="utf-8" ?> 
<application> 
    <settings> 
        <setting key="conn">Provider=SQLOLEDB.1;Password=123456;Persist Security Info=True;User ID=CPR;Initial Catalog=HTIOA;Data Source=192.168.0.124</setting> 
        <setting key="conndbxml">Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=IssueVision;Data Source=(local)</setting> 
        <!-- 
        
            定义查询表结构使用的SQL语句,  
            
            queryfield_驱动程序名称 定义了查询指定表的字段定义的SQL语句,该语句带有一个参数 
            
            querytable_驱动程序名称 定义了查询所有表名及其字段个数的SQL语句,该语句没有参数 
            
            目前定义了 oracle和ms sql server 的SQL语句 
            
         --> 
        <setting key="queryfield_OraOLEDB.Oracle.1">Select TName  ,CName  ,coltype  ,width    From  Col  where tname in (#tablelist) Order by TName,CName</setting> 
        <setting key="querytable_OraOLEDB.Oracle.1">Select TName   ,count(*)   From Col group by tname Order by TName </setting> 
        <setting key="queryfield_SQLOLEDB.1"><![CDATA[select  sysobjects.name  ,syscolumns.name   ,systypes.name  ,syscolumns.length  from syscolumns,sysobjects,systypes where syscolumns.id=sysobjects.id and syscolumns.xtype=systypes.xtype and sysobjects.type='U' and systypes.name <>'_default_' and systypes.name<>'sysname' and sysobjects.name in (#tablelist) order by sysobjects.name,syscolumns.name]]></setting> 
        <setting key="querytable_SQLOLEDB.1"><![CDATA[select  sysobjects.name ,count(*) from syscolumns,sysobjects,systypes where syscolumns.id=sysobjects.id and syscolumns.xtype=systypes.xtype and sysobjects.type='U' and systypes.name <>'_default_' and systypes.name<>'sysname' group by sysobjects.name order by sysobjects.name]]></setting> 
    </settings> 
</application>

####################### main.xml   ##################################
<?xml version="1.0" encoding="gb2312" ?>
<xsl:stylesheet xmlns:xsl=" http://www.w3.org/1999/XSL/Transform&q ... on="1.0">
    <xsl:output method="xml" indent="yes" />
    <xsl:template match="/*">
        <html>
            <head>
                <title></title>
                <style>
                select2{ font-family: "宋体"; font-size: 12px}
                body{  font-family: "宋体"; font-size: 12px} 
                table{ width:100%; border-collapse:collapse;
                    border: 1px #CC0066 solid; font-family: "宋体"; 
                    font-size: 12px}
                .tablehead{background-color:#CCCCFF}
                td{ border: 1px #CC0066 solid}            </style>
            </head>
            <body leftmargin='1' rightmargin='1' topmargin="1">
                <form name="frm" target="code" method="POST" action="dbxml.aspx?type=queryfield">
                模板<select name="template">
                        <xsl:for-each select="template">
                            <option>
                                <xsl:attribute name="value">
                                    <xsl:value-of select="@key" />
                                </xsl:attribute>
                                <xsl:value-of select="@key" />
                            </option>
                        </xsl:for-each>
                    </select>
                <input type="submit" value="提交" />
                <table>
                        <tr class="tablehead">
                            <td nowrap="1">选择</td>
                            <td nowrap="1">表名</td>
                            <td nowrap="1">字段个数</td>
                        </tr>
                        <xsl:for-each select="table">
                            <tr>
                                <td nowrap="1">
                                    <input type="checkbox" name="tablelist" style="width:13;height:13">
                                        <xsl:attribute name="value">
                                            <xsl:value-of select="@name" />
                                        </xsl:attribute>
                                    </input>
                                </td>
                                <td>
                                    <xsl:value-of select="@name" />
                                </td>
                                <td>
                                    <xsl:value-of select="@count" />
                                </td>
                            </tr>
                        </xsl:for-each>
                    </table>
            </form>
            </body>
        </html>
    </xsl:template>
</xsl:stylesheet>


############################### temp_CSharp.xml 内容 ############################################
<?xml version="1.0" encoding="utf-8" ?>
<xsl:stylesheet xmlns:xsl=" http://www.w3.org/1999/XSL/Transform&q ... on="1.0">
    <xsl:output method="xml" indent="yes" />
    <xsl:template match="/">
        <html>
            <head></head>
            <body>
                <xsl:for-each select="*/table">
<br />-------------- 文件名 <xsl:value-of select="@tablename" />.cs -----------------------------
            <pre style=" background-color:gainsboro">
//-----------------------------------------------------------------------------
<xsl:text disable-output-escaping="yes">
    /// <summary></xsl:text>
    /// 数据库表 <xsl:value-of select="@tablename" /> 操作对象
    /// 编制: 代码生成器
    /// 时间:
<xsl:text disable-output-escaping="yes">    /// </summary></xsl:text>
    public class Struct<xsl:value-of select="@tablename" />  : CommonStruct
    {    private const string c_TableName ="<xsl:value-of select="@tablename" />";
        // 定义数据库字段变量 ////////////////////////////////////////////////////////////////
        <xsl:for-each select="*">
            <xsl:variable name="csharptype">
                <xsl:choose>
                    <xsl:when test="@isstring='1'">string </xsl:when>
                    <xsl:when test="boolean('true')">int    </xsl:when>
                </xsl:choose>
            </xsl:variable>
            <xsl:variable name="lowfieldname">
                <xsl:value-of select="translate(@fieldname,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')" />
            </xsl:variable>
        private  <xsl:value-of select="$csharptype" /> m_<xsl:value-of select="@fixname" /> ; // 字段 <xsl:value-of select="@cname" /> 
        </xsl:for-each>
        
        // 定义属性 ///////////////////////////////////////////////////////////
        <xsl:for-each select="*">
        <xsl:variable name="csharptype">
                <xsl:choose>
                    <xsl:when test="@isstring='1'">string </xsl:when>
                    <xsl:when test="boolean('true')">int    </xsl:when>
                </xsl:choose>
            </xsl:variable>
        /// <xsl:text disable-output-escaping="yes">&lt;summary&gt;</xsl:text>
        /// 设置/返回数据库字段属性 <xsl:value-of select="@cname" />
         /// <xsl:text disable-output-escaping="yes">&lt;/summary&gt;</xsl:text>
        /// <xsl:text disable-output-escaping="yes">&lt;returns&gt;</xsl:text><xsl:value-of select="@cname" /><xsl:text disable-output-escaping="yes"> &lt;/returns&gt;</xsl:text>
        public <xsl:value-of select="$csharptype" /> m<xsl:value-of select="@fieldname" />
        {
            get{ return m_<xsl:value-of select="@fieldname" />  ;}
            set{ m_<xsl:value-of select="@fieldname" /> = value ;}
        }
        </xsl:for-each>
        
        
        new public  static string getTableName()
        {return c_TableName ;}
        new public static string getSelectSQL()
        {
            return  "Select <xsl:for-each select="*">
                            <xsl:value-of select="normalize-space(@fieldname)" />
                            <xsl:if test="position() != last()">,</xsl:if>
                        </xsl:for-each> From " + c_TableName ;
        }
        new public static string getTypeName()
        {
            return "<xsl:value-of select="translate(@tablename,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')" />";
        }
        new public  static string SearchKey(string strKey)
        {    
            return getSelectSQL() + " Where SEQ =" + strKey  ;
        }
        public override bool SetCommandParams( System.Data.OleDb.OleDbCommand myCmd,bool SetValues )
        {
            if(myCmd!= null)
            {
                myCmd.Parameters.Clear ();
                <xsl:for-each select="*">
                    myCmd.Parameters.Add("<xsl:value-of select="normalize-space(@fieldname)" />",System.Data.OleDb.OleDbType.<xsl:if test="@isstring='1'">VarWChar</xsl:if><xsl:if test="@isstring='0'">Integer</xsl:if>);</xsl:for-each>
                if(SetValues)
                {
                    <xsl:for-each select="*">
                    myCmd.Parameters[<xsl:value-of select="position()-1" />].Value = m_<xsl:value-of select="@fieldname" /> ; // 字段 <xsl:value-of select="@cname" /> 
                    </xsl:for-each>
                }
                return true;
            }
            return false;
        }
        public override bool SetInsertCommand( System.Data.OleDb.OleDbCommand myCmd)
        {
            if(myCmd != null)
            {
                myCmd.CommandText ="Insert Into " + c_TableName 
                            + " ( <xsl:for-each select="*">[<xsl:value-of select="normalize-space(@fieldname)" />]<xsl:if test="position() != last()">,</xsl:if>
                        </xsl:for-each>) Values (<xsl:for-each select="*">?<xsl:if test="position() != last()">,</xsl:if>
                        </xsl:for-each>)";
                return this.SetCommandParams(myCmd,true);
            }
            return false;
        }
        public override bool SetUpdateCommand(System.Data.OleDb.OleDbCommand myCmd)
        {
            if(myCmd != null)
            {
                myCmd.CommandText ="Update " + c_TableName    
                            + " Set <xsl:for-each select="*">[<xsl:value-of select="normalize-space(@fieldname)" />]=? <xsl:if test="position() != last()">,</xsl:if></xsl:for-each> Where SEQ=" + m_SEQ ;
                return this.SetCommandParams(myCmd,true);
            }
            return false;
        }
        public override bool SelectRS(System.Data.OleDb.OleDbDataReader myReader)
        {
            try
            {
                if(myReader != null)
                {
                    if (myReader.FieldCount==5)
                    {
                        <xsl:for-each select="*">
                        m_<xsl:value-of select="@fixname" /> = Convert.To<xsl:if test="@isstring='1'">String</xsl:if><xsl:if test="@isstring='0'">Int32</xsl:if>(myReader[<xsl:value-of select="position()-1" />]);</xsl:for-each>
                        return true;
                    }
                }
            }
            catch 
            {}
            return false;
        }
        public override bool ToXML(System.Xml.XmlElement myElement)
        {
            if(myElement != null)
            {
                <xsl:for-each select="*">
                myElement.SetAttribute("<xsl:value-of select="translate(@fieldname,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')" />",m_<xsl:value-of select="@fieldname" /><xsl:if test="@isstring='0'">.ToString()</xsl:if>);</xsl:for-each>
                return true;
            }
            return false;
        }
        public override bool FromXML(System.Xml.XmlElement myElement)
        {
            try
            {
                if(myElement != null)
                {
                    <xsl:for-each select="*">
                    m_<xsl:value-of select="@fixname" /> = <xsl:if test="@isstring='0'">Convert.ToInt32(</xsl:if>myElement.GetAttribute("<xsl:value-of select="translate(@fieldname,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')" />")<xsl:if test="@isstring='0'">)</xsl:if>;</xsl:for-each>
                    return true;
                }
            }
            catch
            {}
            return false;
        }
    }// 数据库操作类 Struct<xsl:value-of select="@tablename" /> 定义结束
</pre>
                    </xsl:for-each>
            </body>
        </html>
    </xsl:template>
</xsl:stylesheet>
########################## temp_HTML代码.xml #####################################################
<?xml version="1.0" encoding="utf-8" ?>
<xsl:stylesheet xmlns:xsl=" http://www.w3.org/1999/XSL/Transform&q ... on="1.0">
    <xsl:output method="xml" indent="yes" />
    <xsl:template match="/*">
        <html>
            <head>
                <style>
            body{    font-family: "宋体"; font-size: 12px} 
            table { width:100%; border-collapse:collapse;
                    border: 1px #CC0066 solid; font-family: "宋体"; 
                    font-size: 12px}
            .tablehead{background-color:#CCCCFF}
            td{ border: 1px #CC0066 solid}
            </style>
            </head>
            <body>
                <xsl:for-each select="table">
        数据表 <b><xsl:value-of select="translate(@tablename,'abcdefghijklmnopqrstuvwxyz','ABCDEFGHIJKLMNOPQRSTUVWXYZ')" /></b> 结构
        共 <xsl:value-of select="count(*)" /> 个字段
        <br />
        <table >
            <tr class="tablehead">
                <td>字段名</td>
                <td>类型</td>
                <td>长度</td>
            </tr>
            <xsl:for-each select="*">
                <tr>
                    <td>
                        <xsl:value-of select="@fieldname" />
                    </td>
                    <td>
                        <xsl:value-of select="@fieldtype" />
                    </td>
                    <td>
                        <xsl:value-of select="@fieldwidth" />
                    </td>
                </tr>
            </xsl:for-each>
        </table>
        <p /><hr />
    </xsl:for-each>
            </body>
        </html>
    </xsl:template>
</xsl:stylesheet>
################################ temp_Java_Struct.xml #######################################################################
<?xml version="1.0" encoding="utf-8" ?>
<xsl:stylesheet xmlns:xsl=" http://www.w3.org/1999/XSL/Transform&q ... on="1.0">
    <xsl:output method="xml" indent="yes" />
    <xsl:template match="/">
    <html><head></head><body>
        <xsl:for-each select="*/table">
<br />-------------- 文件名 <xsl:value-of select="@tablename" />.java -----------------------------
            <pre style=" background-color:gainsboro">

package com.haitai.emr.struct;
import java.sql.*;
import java.io.*;
/**   <xsl:value-of select="@cname" />
 *    @author 代码生成器 */
public class <xsl:value-of select="@tablename" /> implements Serializable
{        // 定义数据库字段变量 ////////////////////////////////////////////////////////////////
        <xsl:for-each select="*">
        <xsl:variable name="javatype">
                    <xsl:choose>
                        <xsl:when test="@isstring='1'">String  </xsl:when>
                        <xsl:when test="boolean('true')"            >int     </xsl:when>
                    </xsl:choose>
                </xsl:variable>
                <xsl:variable name="lowfieldname">
                    <xsl:value-of select="translate(@fixname,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')" />
                </xsl:variable>
    private <xsl:value-of select="$javatype" /> <xsl:text disable-output-escaping="yes"></xsl:text><xsl:value-of select="$lowfieldname" /> ; // 字段 <xsl:value-of select="@cname" />  
        </xsl:for-each>
                public static final String SELECT = 
                       "Select <xsl:for-each select="*">
                <xsl:value-of select="normalize-space(@fieldname)" />
                <xsl:if test="position() != last()">,</xsl:if>
            </xsl:for-each> From <xsl:value-of select="@tablename" />";
    /** @param conn 
     * @exception SQLException */
   public java.sql.PreparedStatement makeInsSt (java.sql.Connection conn) throws SQLException{
        PreparedStatement pst=conn.prepareStatement("insert into <xsl:value-of select="@tablename" />(<xsl:for-each select="*">
                <xsl:value-of select="normalize-space(@fieldname)" />
                <xsl:if test="position() != last()">,</xsl:if>
            </xsl:for-each>)"
             +"values(<xsl:for-each select="*">?<xsl:if test="position() != last()">,</xsl:if></xsl:for-each>)");
      int index=0;
      <xsl:for-each select="*">
      pst.setString(++index,this.get<xsl:value-of select="@fieldname" />()); // <xsl:value-of select="@cname" />
      </xsl:for-each>
      return pst;
   }
   
    /** @param conn 
     * @exception SQLException */
   public java.sql.PreparedStatement makeUpdSt (java.sql.Connection conn) throws SQLException{
      
         // TODO : implement
         PreparedStatement pst=conn.prepareStatement("update <xsl:value-of select="@tablename" /> set <xsl:for-each select="*"><xsl:value-of select="normalize-space(@fieldname)" /> =? <xsl:if test="position() != last()">,</xsl:if></xsl:for-each>)"
         +"where 数据表关键字段名=?");
         int index=0;
       <xsl:for-each select="*">
      pst.setString(++index,this.get<xsl:value-of select="@fieldname" />()); // <xsl:value-of select="@cname" />
      </xsl:for-each>
 
         //关键字
         pst.setString(++index,this.get数据表关键字段名());//数据表关键字段说明
   
         return pst;
      }
   
   public String toString (){
   
      // TODO : implement
      return <xsl:for-each select="*">"<xsl:if test="position() != 1">,</xsl:if><xsl:value-of select="normalize-space(@fieldname)" />="+ <xsl:value-of select="@lowfieldname" /><xsl:if test="position() != last()"> + </xsl:if> </xsl:for-each>;
   }
   
   // 读取和修改数据的接口
   <xsl:for-each select="*">
        <xsl:variable name="javatype">
                    <xsl:choose>
                        <xsl:when test="@isstring='1'">String</xsl:when>
                        <xsl:when test="boolean('true')">int</xsl:when>
                    </xsl:choose>
                </xsl:variable>
                <xsl:variable name="lowfieldname">
                    <xsl:value-of select="translate(@fieldname,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')" />
                </xsl:variable>
       public <xsl:value-of select="$javatype" /> get<xsl:value-of select="@fieldname" />(){
           return <xsl:value-of select="normalize-space($lowfieldname)" /> ;
       }
       //@param <xsl:value-of select="@cname" />
       public void  set<xsl:value-of select="@fieldname" />(<xsl:value-of select="@javatype" /> value){
           <xsl:value-of select="normalize-space($lowfieldname)" /> = value ;
       }
   </xsl:for-each>
} // 类 <xsl:value-of select="@tablename" /> 定义结束
</pre>
                    </xsl:for-each>
                    
    </body>
    </html>
    </xsl:template>
</xsl:stylesheet>
######################################## temp_VB.xml ############################################################
<?xml version="1.0" encoding="utf-8" ?>
<xsl:stylesheet xmlns:xsl=" http://www.w3.org/1999/XSL/Transform&q ... on="1.0">
    <xsl:output method="xml" indent="yes" />
    <xsl:template match="/">
        <html>
            <head></head>
            <body>
                <xsl:for-each select="*/table">
<br />-------------- 文件名 <xsl:value-of select="@tablename" />.cls -----------------------------
            <pre style=" background-color:gainsboro">
'******************************************************************************
'**
'**          数据表 <xsl:value-of select="@cname" />[ <xsl:value-of select="@tablename" /> ]操作的对象
'**
'** 编制:代码生成器 
'** 时间:
'**
'******************************************************************************
'** 定义和数据库字段对应的变量 *************************************************************
    private const c_TableName As String  = "<xsl:value-of select="@tablename" />"        '** 数据表名称
    <xsl:for-each select="*">
    <xsl:variable name="vbtype">
                <xsl:choose>
                    <xsl:when test="@isstring='1'">String  </xsl:when>
                    <xsl:when test="boolean('true')"            >Integer </xsl:when>
                </xsl:choose>
            </xsl:variable>
            <xsl:variable name="lowfieldname">
                <xsl:value-of select="translate(@fieldname,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')" />
            </xsl:variable>
    private m_<xsl:value-of select="@fixname" /> As <xsl:value-of select="$vbtype" />  '** 字段 <xsl:value-of select="@cname" />    
    </xsl:for-each>
    
'** 定义数据库字段属性接口 ***************************************************************
        Public Property Get TableName() As String
            TableName = c_TableName
        End Property
    <xsl:for-each select="*">
    <xsl:variable name="vbtype">
                <xsl:choose>
                    <xsl:when test="@isstring='1'">String  </xsl:when>
                    <xsl:when test="boolean('true')"            >Integer </xsl:when>
                </xsl:choose>
            </xsl:variable>
        '** 数据库字段 <xsl:value-of select="@cname" />
        Public Property Get m<xsl:value-of select="@fieldname" />() As <xsl:value-of select="$vbtype" />
            m<xsl:value-of select="@fieldname" /> =  m_<xsl:value-of select="@fieldname" />
        End Property
        Public Property Let m<xsl:value-of select="@fieldname" />(Byval Value As <xsl:value-of select="$vbtype" />)
            m_<xsl:value-of select="@fieldname" /> =  m<xsl:value-of select="@fieldname" />
        End Property
    </xsl:for-each>
'** 获得查询所有数据使用的SQL语句 **
        public Function GetBaseSQL() As String 
            GetBaseSQL ="Select <xsl:for-each select="*">
                            <xsl:value-of select="@fieldname" />
                            <xsl:if test="position() != last()">,</xsl:if>
                        </xsl:for-each> From " <xsl:text disable-output-escaping="yes">&</xsl:text> c_TableName
        End Function
        
'** 定义从数据库记录集获得数据的方法 **
    Public Function SelectRS(ByVal rs As ADODB.Recordset) As Boolean
        On Error GoTo SelectErr
        SelectRS = False
        <xsl:for-each select="*">
        m_<xsl:value-of select="@fixname" /> = rs.Fields(<xsl:value-of select="position()-1" />).Value  '** 字段 <xsl:value-of select="@cname" />
        </xsl:for-each>
        SelectRS = True
        Exit Function
SelectErr:
        SelectRS = False
    End Function
    
    
    
</pre>
                    </xsl:for-each>
            </body>
        </html>
    </xsl:template>
</xsl:stylesheet>

####################### temp_表说明文档.xml   ##################################
<?xml version="1.0" encoding="utf-8" ?>
<xsl:stylesheet xmlns:xsl=" http://www.w3.org/1999/XSL/Transform&q ... on="1.0">
    <xsl:template match="/">
        <html>
            <head></head>
            <body>
                <xsl:for-each select="*/table">
-------------表 <xsl:value-of select="@tablename" /> 的说明文档 <xsl:value-of select="count(*)" />个字段
<br /><pre style="word-wrap:break-word;background-color:gainsboro">
<xsl:for-each select="*"><xsl:value-of select="@fixname" /><xsl:text disable-output-escaping="yes">      </xsl:text><xsl:value-of select="@fieldtype" />  
<xsl:if test="@isstring='1'">(<xsl:value-of select="@fieldwidth" />)</xsl:if>                .
<xsl:text disable-output-escaping="yes"></xsl:text>
</xsl:for-each>
                    </pre>
                    </xsl:for-each>
            </body>
        </html>
    </xsl:template>
</xsl:stylesheet>

####################### temp_创建表的SQL语句.xml   ##################################
<?xml version="1.0" encoding="utf-8" ?>
<xsl:stylesheet xmlns:xsl=" http://www.w3.org/1999/XSL/Transform&q ... on="1.0">
    <xsl:template match="/">
        <html>
            <head></head>
            <body>
                <xsl:for-each select="*/table">
-------------创建表 <xsl:value-of select="@tablename" /> 的SQL语句 <xsl:value-of select="count(*)" />个字段
<br /><pre style="word-wrap:break-word;background-color:gainsboro">
CREATE TABLE <xsl:value-of select="@tablename" />( 
    <xsl:for-each select="*">
<xsl:text disable-output-escaping="yes"></xsl:text>
                            <xsl:value-of select="@fixname" />
                            <xsl:value-of select="@fieldtype" />
                            <xsl:if test="@isstring='1'">(<xsl:value-of select="@fieldwidth" />)</xsl:if>
                            <xsl:if test="position() != last()"> ,
        </xsl:if>
                        </xsl:for-each>
)
                        </pre>
                    </xsl:for-each>
            </body>
        </html>
    </xsl:template>
</xsl:stylesheet>

#######################  temp_选择表使用的SQL语句.xml  ##################################
<?xml version="1.0" encoding="utf-8" ?>
<xsl:stylesheet xmlns:xsl=" http://www.w3.org/1999/XSL/Transform&q ... on="1.0">
    <xsl:template match="/">
        <html>
            <head></head>
            <body>
                <xsl:for-each select="*/table">
-------------选择表 <xsl:value-of select="@tablename" /> 的SQL语句 <xsl:value-of select="count(*)" />个字段
<br /><pre style="word-wrap:break-word;background-color:gainsboro">
Select <xsl:for-each select="*">
                            <xsl:text disable-output-escaping="yes"></xsl:text>
                            <xsl:value-of select="normalize-space(@fieldname)" />
                            <xsl:if test="position() != last()"> , </xsl:if>
                        </xsl:for-each> 
From <xsl:value-of select="@tablename" /></pre>
                    </xsl:for-each>
            </body>
        </html>
    </xsl:template>
</xsl:stylesheet>
C#导出MSSQL数据结构 C#连接SQLServer数据库,查找所有数据库,查找所有表,导出单个表结构,导出所有表结构,生成表实体。 立即下载

相关推荐

【ROS2】Arduino系列之机器人底盘实现

介绍ros中提供的一个已经封装了的模块: ros_arduino_bridge,该模块由下位机驱动和上位机控制两部分组成,通过该模块可以更为快捷、方便的实现自己的机器人平台

guilin 1486

C# XML基本操作

XML

钢铁男儿 1120

基于ASP.NET+SQLServer的美妆网站的设计与实现

通过本次ASP.NET MVC美妆商城项目的开发,我们实现了一个功能完善、性能稳定的在线购物平台。该项目不仅提升了用户的购物体验,也为商家提供了一个高效的商品管理和销售渠道。未来,我们将持续优化系统功能,提升用户体验,以适应不断变化的市场需求。

毕业设计大牛哥 1502

c#常用数据结构解析

前言: 可能去过小匹夫博客的盆油们读过这篇对于数据结构的总结,但是小匹夫当时写那篇文章的时候略有匆忙,所以今天进行了一些增改,重新发表在蛮牛。作为程序猿,对于常见的数据结构的掌握是非常必要的,也许这篇文章略显朴实,没有那么花哨的东西,但是小匹夫也希望各位程序向的U3D从业者能喜欢。 前段时间小匹夫读过一份代码,对其中各种数据结构灵活的使用赞不绝口,同时也大大激发了小匹夫对各种数据结构进行梳理和

随风吹笛 3万+

【AMD显卡在WIndow10/11部署带GPU支持的深度学习环境(Pytorch-DirectML篇)】

这篇是之前Tensorflow-DirectML的姊妹篇,如果对TF感兴趣的可以搜索我的博文。 首先我们丢一个官网地址,但是官网那个会误导新人如果你按那个操作的话。 https://docs.microsoft.com/en-us/windows/ai/directml/gpu-pytorch-windows 这里用我的方法操作: 首先声明一下,因为我的显卡是AMD RX6600,不带XT(性能和RTX3060 12G版本半斤八两),所以目前没有最新的WSL2驱动,如果有了的话欢迎告知我,所以我这里就.

weixin_44029053的博客 2万+

超级详细!!!新手使用AutoDL跑深度学习(MixVPR项目)的学习记录

新手第一次在AutoDL上跑深度学习的实验,遇到一些问题,简单记录一下。如果大家发现问题,欢迎和我讨论。

weixin_45152283的博客 5万+

C#分析数据库结构,使用XSL模板自动生成代码(一)

分析数据库结构,自动生成代码 ########################### dbxml.aspx 文件内容,该文件没有C#代码文件 ############# System.Xml.XmlDocument myCfgXML = new System.Xml.XmlDocument(); // 获得系统配置字符串 string GetAppConfig(string s

在劫や草根 645

VC Spyglass CDC实战:如何快速定位和解决重汇聚问题(附详细调试步骤)

本文深入探讨了在SoC设计中利用VC Spyglass进行CDC验证时,如何高效定位和解决棘手的重汇聚问题。通过实战演练,详细解析了重汇聚的本质、VC Spyglass的检测逻辑,并提供了从报告筛选、GUI原理图分析到制定设计修复或约束豁免方案的全套调试步骤,帮助工程师快速攻克这一常见验证难题。

weixin_29219539的博客 755

C#分析数据库结构,使用XSL模板自动生成代码(二)

########################## temp_HTML代码.xml ##################################################### http://www.w3.org/1999/XSL/Transform" version="1.0"> body{ font-family: "宋体"; font-size: 12px} ta

在劫や草根 594

Multisim14.3主数据库访问冲突:Windows更新KB5065426卸载与系统兼容性修复指南

本文针对Multisim14.3在Windows更新KB5065426后出现的主数据库访问冲突问题,提供了详细的解决方案。通过卸载问题更新、修复系统兼容性及调整权限设置,帮助用户快速恢复元器件库的正常访问,确保电路仿真设计的连续性。

lstm7chronicler的博客 515

Netty UDP

UDP是一种无连接的协议,它并不在通信双方之间建立连接,而是直接将数据包从发送端发送到接收端。UDP不保证数据包的可靠传输,也不保证数据包的顺序,因此其传输速度通常比TCP快,且系统开销较小。然而,这也意味着UDP在某些情况下可能会丢失数据包或数据包到达的顺序错乱。

王小工小工历程 2028

[导入]C#分析数据库结构,使用XSL模板自动生成代码

文章来源:http://blog.youkuaiyun.com/21aspnet/archive/2007/03/24/1539902.aspx 转载于:https://www.cnblogs.com/zhaoxiaoyang2/archive/2007/03/24/816290.html

weixin_30483495的博客 121

高项备考论文:规划绩效域

高项备考论文:规划绩效域

liuxu324的博客 1129

C#分析数据库结构,使用XSL模板自动生成代码 - 清清月儿 .NET万花筒 Asp.net技术 Asp.net教程 Asp.net源码 Asp.net基础 Asp.net控件 Asp.net入门 - 优快云Blog

导读:                                 ########################### dbxml.aspx 文件内容,该文件没有C#代码文件 #############      System.Xml.XmlDocument myCfgXML = new System.Xml.XmlDocument();   // 获得系统配置字符串   string

long301的专栏 596

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

利用XML和XSL建立源代码产生模板

1、引言 如何处理编程中遇到的复杂问题是IT人员常遇到的最大挑战之一。因此我们非常需要各种工具来帮助我们更好地理解和管理软件开发中的复杂性。这样的工具不仅能够帮助我们创立更好的程序源代码,而且能够提高软件的开发效率。源代码产生器是一种能够从简单模型产生复杂程序源代码的工具。所以,源代码产生器是帮助我们妥善处理软件复杂性的理想候选工具。 XML是W3C(World Wide Web Consorti

myali88的专栏 1787

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

上一篇: 用C#操作XML
下一篇: 收集一些常用的正则表达式。
AllenTing
博客等级 码龄22年 2粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值