分享
 
 
 

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

王朝c#·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

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" version="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" version="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" version="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" version="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" version="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" version="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" version="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" version="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>

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有