<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="inc/Templates/rss.xslt" ?>
<rss version="2.0"><channel><title>冬雷软件论坛--软件开发最新20篇论坛主题-全文</title><link>http://www.donlei.com/forum/</link><language>zh-cn</language><description>冬雷软件论坛</description><copyright>http://www.donlei.com/</copyright><generator>Rss Generator By Dvbbs.Net</generator><webMaster>tt93dkf@126.com</webMaster><image><url>../images/logo_index.jpg</url><title>冬雷软件论坛</title></image><item><title>[原创]进入软件高产期，编了一大堆软件！！！</title><link>http://www.donlei.com/forum/dispbbs.asp?BoardID=28&amp;ID=1968&amp;Page=1</link><author>果果</author><pubDate>2007-04-12 10:34:12</pubDate><description><![CDATA[<DIV>近段时间进入本人软件高产期，写了一大堆程序，全是商品</DIV><DIV>编写语言包括：Delphi7、.NET2.0、ASP、VB、JAVA</DIV><DIV>数据库：MSSQL2000、Access2000</DIV><DIV>ASP、VB、JAVA是我以前不曾用过的，现在也觉得挺简单的。</DIV><DIV>我编，我写，忙的眼睛都没时间眨，</DIV><DIV>我编，我写，忙的饭也没时间吃，</DIV><DIV>我编，我写，忙的觉得不想睡，</DIV><DIV>我编，我写…</DIV><DIV><DIV>我编，我写……</DIV><DIV><DIV>我编，我写………</DIV><DIV><DIV>我编，我写…………</DIV><DIV><DIV>我编，我写……………</DIV></DIV></DIV></DIV></DIV>]]></description></item><item><title>[转贴]实例讲解.NET如何访问MySQL数据库</title><link>http://www.donlei.com/forum/dispbbs.asp?BoardID=28&amp;ID=1967&amp;Page=1</link><author>果果</author><pubDate>2007-03-01 22:41:11</pubDate><description><![CDATA[<FONT size=3>　　.NET的数据库天然支持MSSQLServer，但是并非其他数据库不支持，而是微软基于自身利益需要，在支持、营销上推自己的数据库产品;但是作为平台战略，他并非排斥其他数据库，而是参考java体系提出了一套数据库访问规范，让各个第三方进行开发，提供特定的驱动。 </FONT><P>　　MySQL是免费的数据库，在成本上具有无可替代的优势，但是目前来讲，并没有提供。微软把MySQL当作ODBC数据库，可以按照ODBC.Net规范进行访问，具体参考</P><P>　　http://www.microsoft.com/china/community/Columns/Luyan/6.mspx</P><P>　　而实际上，针对ODBC。Net的需要配置DSN的麻烦，而是出现了一个开源的系统MySQLDriverCS，对MySQL的开发进行了封装，实现了.net环境下对于MySQL数据库系统的访问。</P><P>　　http://sourceforge.net/projects/mysqldrivercs/</P><P>　　通过阅读源代码，我们看到MySQLDriverCS的思路是利用C函数的底层库来操纵数据库的，通常提供对MySQL数据库的访问的数据库的C DLL是名为libmySQL.dll的驱动文件，MySQLDriverCS作为一个.net库进行封装C风格的驱动。</P><P>　　具体如何进行呢?</P><P>　　打开工程后，我们看到其中有一个比较特殊的.cs文件CPrototypes.cs：</P><P><TABLE style="BORDER-RIGHT: #cccccc 1px dotted; TABLE-LAYOUT: fixed; BORDER-TOP: #cccccc 1px dotted; BORDER-LEFT: #cccccc 1px dotted; BORDER-BOTTOM: #cccccc 1px dotted" cellSpacing=0 cellPadding=6 width="95%" align=center border=0><TBODY><TR><TD style="WORD-WRAP: break-word" bgColor=#f3f3f3><FONT style="FONT-WEIGHT: bold; COLOR: #990000">以下是引用片段：</FONT><BR><DIV align=left><SPAN style="FONT-SIZE: 9pt; COLOR: blue">#region</SPAN><SPAN style="FONT-SIZE: 9pt"> LICENSE</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt; COLOR: green">/*</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt; COLOR: green">&nbsp;&nbsp;&nbsp;&nbsp; MySQLDriverCS: An C# driver for MySQL.</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt; COLOR: green">&nbsp;&nbsp;&nbsp;&nbsp; Copyright (c) 2002 Manuel Lucas Vi馻s Livschitz.</SPAN></DIV><DIV align=left>&nbsp;</DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt; COLOR: green">&nbsp;&nbsp;&nbsp;&nbsp; This file is part of MySQLDriverCS.</SPAN></DIV><DIV align=left>&nbsp;</DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt; COLOR: green">&nbsp;&nbsp;&nbsp; MySQLDriverCS is free software; you can redistribute it and/or modify</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt; COLOR: green">&nbsp;&nbsp;&nbsp; it under the terms of the GNU General Public License as published by</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt; COLOR: green">&nbsp;&nbsp;&nbsp; the Free Software Foundation; either version 2 of the License, or</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt; COLOR: green">&nbsp;&nbsp;&nbsp; (at your option) any later version.</SPAN></DIV><DIV align=left>&nbsp;</DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt; COLOR: green">&nbsp;&nbsp;&nbsp; MySQLDriverCS is distributed in the hope that it will be useful,</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt; COLOR: green">&nbsp;&nbsp;&nbsp; but WITHOUT ANY WARRANTY; without even the implied warranty of</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt; COLOR: green">&nbsp;&nbsp;&nbsp; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.&nbsp;See the</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt; COLOR: green">&nbsp;&nbsp;&nbsp; GNU General Public License for more details.</SPAN></DIV><DIV align=left>&nbsp;</DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt; COLOR: green">&nbsp;&nbsp;&nbsp; You should have received a copy of the GNU General Public License</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt; COLOR: green">&nbsp;&nbsp;&nbsp; along with MySQLDriverCS; if not, write to the Free Software</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt; COLOR: green">&nbsp;&nbsp;&nbsp; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA&nbsp;02111-1307&nbsp;USA</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt; COLOR: green">*/</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt; COLOR: blue">#endregion</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt; COLOR: blue">using</SPAN><SPAN style="FONT-SIZE: 9pt"> System;</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt; COLOR: blue">using</SPAN><SPAN style="FONT-SIZE: 9pt"> System.Data;</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt; COLOR: blue">using</SPAN><SPAN style="FONT-SIZE: 9pt"> System.Runtime.InteropServices;</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt; COLOR: blue">namespace</SPAN><SPAN style="FONT-SIZE: 9pt"> MySQLDriverCS</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">{</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: green">//[StructLayout(LayoutKind.Sequential)]</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: blue">public</SPAN> <SPAN style="COLOR: blue">class</SPAN> MYSQL_FIELD_FACTORY</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp; {</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: blue">static</SPAN> <SPAN style="COLOR: blue">string</SPAN> version;</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: blue">public</SPAN> <SPAN style="COLOR: blue">static</SPAN> IMYSQL_FIELD GetInstance()</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</SPAN></DIV><DIV align=left>&nbsp;</DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: blue">if</SPAN> (version==<SPAN style="COLOR: blue">null</SPAN>) </SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; version = CPrototypes.GetClientInfo();</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: blue">if</SPAN> (version.CompareTo("4.1.2-alpha")&gt;=0) </SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: blue">return</SPAN> <SPAN style="COLOR: blue">new</SPAN> MYSQL_FIELD_VERSION_5();</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: blue">else</SPAN> </SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: blue">return</SPAN> <SPAN style="COLOR: blue">new</SPAN> MYSQL_FIELD_VERSION_3();</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp; }</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: blue">public</SPAN> <SPAN style="COLOR: blue">interface</SPAN> IMYSQL_FIELD</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp; {</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: blue">string</SPAN> Name{<SPAN style="COLOR: blue">get</SPAN>;}</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: blue">uint</SPAN> Type{<SPAN style="COLOR: blue">get</SPAN>;}</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: blue">long</SPAN> Max_Length&nbsp;&nbsp;&nbsp;&nbsp; {<SPAN style="COLOR: blue">get</SPAN>;}</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp; }</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: gray">&lt;summary&gt;</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: green"> Field descriptor</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: gray">&lt;/summary&gt;</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp; [StructLayout(LayoutKind.Sequential)]<SPAN style="COLOR: green">//"3.23.32", 4.0.1-alpha</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: blue">internal</SPAN> <SPAN style="COLOR: blue">class</SPAN> MYSQL_FIELD_VERSION_3: IMYSQL_FIELD </SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp; {</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: gray">&lt;summary&gt;</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: green"> Name of column</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: gray">&lt;/summary&gt;</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: blue">public</SPAN> <SPAN style="COLOR: blue">string</SPAN> name;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: gray">&lt;summary&gt;</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: green"> Table of column if column was a field</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: gray">&lt;/summary&gt;</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: blue">public</SPAN> <SPAN style="COLOR: blue">string</SPAN> table; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: green">//public string org_table;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* Org table name if table was an alias */</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: green">//public string db;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* Database for table */</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: gray">&lt;summary&gt;</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: green"> def</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: gray">&lt;/summary&gt;</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: blue">public</SPAN> <SPAN style="COLOR: blue">string</SPAN> def;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: gray">&lt;summary&gt;</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: green"> length</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: gray">&lt;/summary&gt;</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: blue">public</SPAN> <SPAN style="COLOR: blue">long</SPAN> length;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: gray">&lt;summary&gt;</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: green"> max_length</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: gray">&lt;/summary&gt;</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: blue">public</SPAN> <SPAN style="COLOR: blue">long</SPAN> max_length;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: gray">&lt;summary&gt;</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: green"> Div flags</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: gray">&lt;/summary&gt;</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: blue">public</SPAN> <SPAN style="COLOR: blue">uint</SPAN> flags;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: gray">&lt;summary&gt;</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: green"> Number of decimals in field </SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: gray">&lt;/summary&gt;</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: blue">public</SPAN> <SPAN style="COLOR: blue">uint</SPAN> decimals;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: gray">&lt;summary&gt;</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: green"> Type of field. Se mysql_com.h for types </SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: gray">&lt;/summary&gt;</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: blue">public</SPAN> <SPAN style="COLOR: blue">uint</SPAN> type; </SPAN></DIV><DIV align=left>&nbsp;</DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: gray">&lt;summary&gt;</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: green"> Name</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: gray">&lt;/summary&gt;</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: blue">public</SPAN> <SPAN style="COLOR: blue">string</SPAN> Name</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: blue">get</SPAN>{<SPAN style="COLOR: blue">return</SPAN> name;}</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: gray">&lt;summary&gt;</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: green"> Type</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: gray">&lt;/summary&gt;</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: blue">public</SPAN> <SPAN style="COLOR: blue">uint</SPAN> Type</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: blue">get</SPAN>{<SPAN style="COLOR: blue">return</SPAN> type;}</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: gray">&lt;summary&gt;</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: green"> Max_Length</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: gray">&lt;/summary&gt;</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: blue">public</SPAN> <SPAN style="COLOR: blue">long</SPAN> Max_Length</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: blue">get</SPAN>&nbsp;&nbsp;&nbsp;&nbsp; {<SPAN style="COLOR: blue">return</SPAN> max_length;}</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp; } </SPAN></DIV><DIV align=left>&nbsp;</DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: gray">&lt;summary&gt;</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: green"> Field descriptor</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: gray">&lt;/summary&gt;</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp; [StructLayout(LayoutKind.Sequential)]</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: blue">internal</SPAN> <SPAN style="COLOR: blue">class</SPAN> MYSQL_FIELD_VERSION_5: IMYSQL_FIELD </SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp; {</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: gray">&lt;summary&gt;</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: green"> Name of column </SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: gray">&lt;/summary&gt;</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: blue">public</SPAN> <SPAN style="COLOR: blue">string</SPAN> name;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: gray">&lt;summary&gt;</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: green"> Original column name, if an alias</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: gray">&lt;/summary&gt;</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: blue">public</SPAN> <SPAN style="COLOR: blue">string</SPAN> org_name;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: gray">&lt;summary&gt;</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: green"> Table of column if column was a field</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: gray">&lt;/summary&gt;</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: blue">public</SPAN> <SPAN style="COLOR: blue">string</SPAN> table; &nbsp;&nbsp;&nbsp;&nbsp; </SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: gray">&lt;summary&gt;</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: green"> Org table name if table was an alias</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: gray">&lt;/summary&gt;</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: blue">public</SPAN> <SPAN style="COLOR: blue">string</SPAN> org_table;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: gray">&lt;summary&gt;</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: green"> Database for table</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: gray">&lt;/summary&gt;</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: blue">public</SPAN> <SPAN style="COLOR: blue">string</SPAN> db;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: gray">&lt;summary&gt;</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: green"> Catalog for table</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: gray">&lt;/summary&gt;</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: green">//public string catalog;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: gray">&lt;summary&gt;</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: green">&nbsp;def</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: gray">&lt;/summary&gt;</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: blue">public</SPAN> <SPAN style="COLOR: blue">string</SPAN> def;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: gray">&lt;summary&gt;</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: green"> length</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: gray">&lt;/summary&gt;</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: blue">public</SPAN> <SPAN style="COLOR: blue">long</SPAN> length;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: gray">&lt;summary&gt;</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: green"> max_length</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: gray">&lt;/summary&gt;</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: blue">public</SPAN> <SPAN style="COLOR: blue">long</SPAN> max_length;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: gray">&lt;summary&gt;</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: green"> name_length</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: gray">&lt;/summary&gt;</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: green">//public uint name_length;</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: gray">&lt;summary&gt;</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: green"> org_name_length</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: gray">&lt;/summary&gt;</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: blue">public</SPAN> <SPAN style="COLOR: blue">uint</SPAN> org_name_length;</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: gray">&lt;summary&gt;</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: green"> table_length</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: gray">&lt;/summary&gt;</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: blue">public</SPAN> <SPAN style="COLOR: blue">uint</SPAN> table_length;</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: gray">&lt;summary&gt;</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: green"> org_table_length</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: gray">&lt;/summary&gt;</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: blue">public</SPAN> <SPAN style="COLOR: blue">uint</SPAN> org_table_length;</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: gray">&lt;summary&gt;</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: green"> db_length</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: gray">&lt;/summary&gt;</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: blue">public</SPAN> <SPAN style="COLOR: blue">uint</SPAN> db_length;</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: gray">&lt;summary&gt;</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: green"> catalog_length</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: gray">&lt;/summary&gt;</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: blue">public</SPAN> <SPAN style="COLOR: blue">uint</SPAN> catalog_length;</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: gray">&lt;summary&gt;</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: green"> def_length</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: gray">&lt;/summary&gt;</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: blue">public</SPAN> <SPAN style="COLOR: blue">uint</SPAN> def_length;</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: gray">&lt;summary&gt;</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: green"> Div flags</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: gray">&lt;/summary&gt;</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: blue">public</SPAN> <SPAN style="COLOR: blue">uint</SPAN> flags;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: gray">&lt;summary&gt;</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: green"> Number of decimals in field</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: gray">&lt;/summary&gt;</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: blue">public</SPAN> <SPAN style="COLOR: blue">uint</SPAN> decimals;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: gray">&lt;summary&gt;</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: green"> Character set</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: gray">&lt;/summary&gt;</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: blue">public</SPAN> <SPAN style="COLOR: blue">uint</SPAN> charsetnr;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: gray">&lt;summary&gt;</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: green"> Type of field. Se mysql_com.h for types</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: gray">&lt;/summary&gt;</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: blue">public</SPAN> <SPAN style="COLOR: blue">uint</SPAN> type; </SPAN></DIV><DIV align=left>&nbsp;</DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: gray">&lt;summary&gt;</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: green"> Name</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: gray">&lt;/summary&gt;</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: blue">public</SPAN> <SPAN style="COLOR: blue">string</SPAN> Name</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: blue">get</SPAN>&nbsp;&nbsp;&nbsp;&nbsp; {<SPAN style="COLOR: blue">return</SPAN> name;}</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: gray">&lt;summary&gt;</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: green"> Type</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: gray">&lt;/summary&gt;</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: blue">public</SPAN> <SPAN style="COLOR: blue">uint</SPAN> Type</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: blue">get</SPAN>&nbsp;&nbsp;&nbsp;&nbsp; {<SPAN style="COLOR: blue">return</SPAN> type;}</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: gray">&lt;summary&gt;</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: green"> Max_Length</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: gray">&lt;/summary&gt;</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: blue">public</SPAN> <SPAN style="COLOR: blue">long</SPAN> Max_Length</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: blue">get</SPAN>&nbsp;&nbsp;&nbsp;&nbsp; {<SPAN style="COLOR: blue">return</SPAN> max_length;}</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;</SPAN></DIV><DIV align=left>&nbsp;</DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: green">//[StructLayout(LayoutKind.Explicit)]</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: blue">public</SPAN> <SPAN style="COLOR: blue">enum</SPAN> enum_field_types </SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp; {</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; FIELD_TYPE_DECIMAL, FIELD_TYPE_TINY,</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FIELD_TYPE_SHORT,&nbsp;FIELD_TYPE_LONG,</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FIELD_TYPE_FLOAT,&nbsp;FIELD_TYPE_DOUBLE,</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FIELD_TYPE_NULL,&nbsp;&nbsp; FIELD_TYPE_TIMESTAMP,</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FIELD_TYPE_LONGLONG,FIELD_TYPE_INT24,</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FIELD_TYPE_DATE,&nbsp;&nbsp; FIELD_TYPE_TIME,</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FIELD_TYPE_DATETIME, FIELD_TYPE_YEAR,</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FIELD_TYPE_NEWDATE,</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FIELD_TYPE_ENUM=247,</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FIELD_TYPE_SET=248,</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FIELD_TYPE_TINY_BLOB=249,</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FIELD_TYPE_MEDIUM_BLOB=250,</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FIELD_TYPE_LONG_BLOB=251,</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FIELD_TYPE_BLOB=252,</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FIELD_TYPE_VAR_STRING=253,</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FIELD_TYPE_STRING=254,</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FIELD_TYPE_GEOMETRY=255</SPAN></DIV><DIV align=left>&nbsp;</DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp; };</SPAN></DIV><DIV align=left>&nbsp;</DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: gray">&lt;summary&gt;</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: green"> C prototypes warpper for mysqllib.</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///</SPAN><SPAN style="COLOR: gray">&lt;/summary&gt;</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: blue">internal</SPAN> <SPAN style="COLOR: blue">class</SPAN> CPrototypes</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp; {</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; [ DllImport( "libmySQL.dll", EntryPoint="mysql_init" )]</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: blue">unsafe</SPAN> <SPAN style="COLOR: blue">public</SPAN> <SPAN style="COLOR: blue">static</SPAN> <SPAN style="COLOR: blue">extern</SPAN> <SPAN style="COLOR: blue">void</SPAN>* mysql_init(<SPAN style="COLOR: blue">void</SPAN>* must_be_null);</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; [ DllImport( "libmySQL.dll", EntryPoint="mysql_close" )]</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: blue">unsafe</SPAN> <SPAN style="COLOR: blue">public</SPAN> <SPAN style="COLOR: blue">static</SPAN> <SPAN style="COLOR: blue">extern</SPAN> <SPAN style="COLOR: blue">void</SPAN> mysql_close(<SPAN style="COLOR: blue">void</SPAN>* handle);</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: green">// BEGIN ADDITION 2004-07-01 BY Alex Seewald</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: green">// Enables us to call mysql_option to activate compression and timeout</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; [ DllImport( "libmySQL.dll", EntryPoint="mysql_options" )] &nbsp;&nbsp;&nbsp;&nbsp; </SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: blue">unsafe</SPAN> <SPAN style="COLOR: blue">public</SPAN> <SPAN style="COLOR: blue">static</SPAN> <SPAN style="COLOR: blue">extern</SPAN> <SPAN style="COLOR: blue">void</SPAN> mysql_options(<SPAN style="COLOR: blue">void</SPAN>* mysql, <SPAN style="COLOR: blue">uint</SPAN> option, <SPAN style="COLOR: blue">uint</SPAN> *<SPAN style="COLOR: blue">value</SPAN>);</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: green">// END ADDITION 2004-07-01 By Alex Seewald</SPAN></SPAN></DIV><DIV align=left>&nbsp;</DIV><DIV align=left>&nbsp;</DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; [ DllImport( "libmySQL.dll", EntryPoint="mysql_real_connect" )]</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: blue">unsafe</SPAN> <SPAN style="COLOR: blue">public</SPAN> <SPAN style="COLOR: blue">static</SPAN> <SPAN style="COLOR: blue">extern</SPAN> <SPAN style="COLOR: blue">void</SPAN>* mysql_real_connect(<SPAN style="COLOR: blue">void</SPAN>* mysql, <SPAN style="COLOR: blue">string</SPAN> host, <SPAN style="COLOR: blue">string</SPAN> user, <SPAN style="COLOR: blue">string</SPAN> passwd, <SPAN style="COLOR: blue">string</SPAN> db, <SPAN style="COLOR: blue">uint</SPAN> port, <SPAN style="COLOR: blue">string</SPAN> unix_socket, <SPAN style="COLOR: blue">int</SPAN> client_flag);</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; [ DllImport( "libmySQL.dll", EntryPoint="mysql_query" )]</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: blue">unsafe</SPAN> <SPAN style="COLOR: blue">public</SPAN> <SPAN style="COLOR: blue">static</SPAN> <SPAN style="COLOR: blue">extern</SPAN> <SPAN style="COLOR: blue">int</SPAN> mysql_query(<SPAN style="COLOR: blue">void</SPAN>*mysql, <SPAN style="COLOR: blue">string</SPAN> query);</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; [ DllImport( "libmySQL.dll", EntryPoint="mysql_store_result" )]</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: blue">unsafe</SPAN> <SPAN style="COLOR: blue">public</SPAN> <SPAN style="COLOR: blue">static</SPAN> <SPAN style="COLOR: blue">extern</SPAN> <SPAN style="COLOR: blue">void</SPAN> *mysql_store_result(<SPAN style="COLOR: blue">void</SPAN> *mysql);</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; [ DllImport( "libmySQL.dll", EntryPoint="mysql_free_result" )]</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: blue">unsafe</SPAN> <SPAN style="COLOR: blue">public</SPAN> <SPAN style="COLOR: blue">static</SPAN> <SPAN style="COLOR: blue">extern</SPAN> <SPAN style="COLOR: blue">void</SPAN> mysql_free_result(<SPAN style="COLOR: blue">void</SPAN>*result);</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; [ DllImport( "libmySQL.dll", EntryPoint="mysql_errno" )]</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: blue">unsafe</SPAN> <SPAN style="COLOR: blue">public</SPAN> <SPAN style="COLOR: blue">static</SPAN> <SPAN style="COLOR: blue">extern</SPAN> <SPAN style="COLOR: blue">uint</SPAN> mysql_errno(<SPAN style="COLOR: blue">void</SPAN>*mysql);</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; [ DllImport( "libmySQL.dll", EntryPoint="mysql_error" )]</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: blue">unsafe</SPAN> <SPAN style="COLOR: blue">public</SPAN> <SPAN style="COLOR: blue">static</SPAN> <SPAN style="COLOR: blue">extern</SPAN> <SPAN style="COLOR: blue">string</SPAN> mysql_error(<SPAN style="COLOR: blue">void</SPAN>*mysql);</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; [ DllImport( "libmySQL.dll", EntryPoint="mysql_field_count" )]</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: blue">unsafe</SPAN> <SPAN style="COLOR: blue">public</SPAN> <SPAN style="COLOR: blue">static</SPAN> <SPAN style="COLOR: blue">extern</SPAN> <SPAN style="COLOR: blue">uint</SPAN> mysql_field_count(<SPAN style="COLOR: blue">void</SPAN>*mysql);</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; [ DllImport( "libmySQL.dll", EntryPoint="mysql_affected_rows" )]</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: blue">unsafe</SPAN> <SPAN style="COLOR: blue">public</SPAN> <SPAN style="COLOR: blue">static</SPAN> <SPAN style="COLOR: blue">extern</SPAN> <SPAN style="COLOR: blue">ulong</SPAN> mysql_affected_rows(<SPAN style="COLOR: blue">void</SPAN>*mysql);</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; [ DllImport( "libmySQL.dll", EntryPoint="mysql_num_fields" )]</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: blue">unsafe</SPAN> <SPAN style="COLOR: blue">public</SPAN> <SPAN style="COLOR: blue">static</SPAN> <SPAN style="COLOR: blue">extern</SPAN> <SPAN style="COLOR: blue">uint</SPAN> mysql_num_fields(<SPAN style="COLOR: blue">void</SPAN>*result);</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; [ DllImport( "libmySQL.dll", EntryPoint="mysql_num_rows" )]</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: blue">unsafe</SPAN> <SPAN style="COLOR: blue">public</SPAN> <SPAN style="COLOR: blue">static</SPAN> <SPAN style="COLOR: blue">extern</SPAN> <SPAN style="COLOR: blue">ulong</SPAN> mysql_num_rows(<SPAN style="COLOR: blue">void</SPAN> *result);</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; [ DllImport( "libmySQL.dll", EntryPoint="mysql_fetch_field_direct" )]</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: blue">unsafe</SPAN> <SPAN style="COLOR: blue">public</SPAN> <SPAN style="COLOR: blue">static</SPAN> <SPAN style="COLOR: blue">extern</SPAN> IntPtr mysql_fetch_field_direct(<SPAN style="COLOR: blue">void</SPAN>*result, <SPAN style="COLOR: blue">uint</SPAN> fieldnr);</SPAN></DIV><DIV align=left>&nbsp;</DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: gray">///&lt;returns&gt;</SPAN><SPAN style="COLOR: green">Returns a string that represents the client library version</SPAN><SPAN style="COLOR: gray">&lt;/returns&gt;</SPAN></SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; [DllImport("libmySQL.dll",CharSet=System.Runtime.InteropServices.CharSet.Ansi,</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; EntryPoint="mysql_get_client_info", ExactSpelling=<SPAN style="COLOR: blue">true</SPAN>)]</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: blue">public</SPAN> <SPAN style="COLOR: blue">static</SPAN> <SPAN style="COLOR: blue">extern</SPAN> <SPAN style="COLOR: blue">string</SPAN> GetClientInfo();</SPAN></DIV><DIV align=left>&nbsp;</DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; [ DllImport( "libmySQL.dll", EntryPoint="mysql_fetch_row" )]</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: blue">unsafe</SPAN> <SPAN style="COLOR: blue">public</SPAN> <SPAN style="COLOR: blue">static</SPAN> <SPAN style="COLOR: blue">extern</SPAN> IntPtr mysql_fetch_row(<SPAN style="COLOR: blue">void</SPAN>*result);</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; [ DllImport( "libmySQL.dll", EntryPoint="mysql_select_db" )]</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: blue">unsafe</SPAN> <SPAN style="COLOR: blue">public</SPAN> <SPAN style="COLOR: blue">static</SPAN> <SPAN style="COLOR: blue">extern</SPAN> <SPAN style="COLOR: blue">int</SPAN> mysql_select_db(<SPAN style="COLOR: blue">void</SPAN>*mysql,<SPAN style="COLOR: blue">string</SPAN> dbname);</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; [ DllImport( "libmySQL.dll", EntryPoint="mysql_fetch_lengths" )]</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: blue">unsafe</SPAN> <SPAN style="COLOR: blue">public</SPAN> <SPAN style="COLOR: blue">static</SPAN> <SPAN style="COLOR: blue">extern</SPAN> UInt32 *mysql_fetch_lengths(<SPAN style="COLOR: blue">void</SPAN>*result);</SPAN></DIV><DIV align=left>&nbsp;</DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp;&nbsp; }</SPAN></DIV><DIV align=left><SPAN style="FONT-SIZE: 9pt">}</SPAN></DIV></TD></TR></TBODY></TABLE></P><DIV>　　基本上是将C风格的基础数据结构进行.net的重新定义，然后通过<SPAN style="FONT-SIZE: 9pt">InteropServices</SPAN>进行访问。</DIV><DIV>&nbsp;</DIV><DIV>　　具体如何利用这个库进行操作，可以参考其中的例子。</DIV>]]></description></item><item><title>[转贴]ASP.NET 2.0防止同一用户同时登陆</title><link>http://www.donlei.com/forum/dispbbs.asp?BoardID=28&amp;ID=1966&amp;Page=1</link><author>果果</author><pubDate>2007-03-01 22:35:31</pubDate><description><![CDATA[<FONT size=3>　　要防止同一用户同时登陆,首页应该记录在线用户的信息(这里与用户名为例),然后判断正在登陆的用户里面是否已存在。在这里使用一个cache存放已经登陆的用户名，但是还有一个问题就是要知道用户是什么时候离开系统的呢?这就要定期清除cache中的内容了，也就是设置一个cache的时间。这个时间可以跟用户的session值联系起来，刚好当用户session值失效的时候该用户在cache里面的信息也会被清空.这样就达到了防止同时登陆的效果，具体代码如下： </FONT><P>　　放在登陆成功的地方：</P><P><TABLE style="BORDER-RIGHT: #cccccc 1px dotted; TABLE-LAYOUT: fixed; BORDER-TOP: #cccccc 1px dotted; BORDER-LEFT: #cccccc 1px dotted; BORDER-BOTTOM: #cccccc 1px dotted" cellSpacing=0 cellPadding=6 width="95%" align=center border=0><TBODY><TR><TD style="WORD-WRAP: break-word" bgColor=#f3f3f3><FONT style="FONT-WEIGHT: bold; COLOR: #990000">以下是引用片段：</FONT><BR>string key = TextBox1.Text; //用户名文本框设为cache关键字 <BR>string uer = Convert.ToString(Cache[key]); //读取cache中用户相应的值<BR>//判断cache中是否有用户的信息，如果没有相关的值，说明用户未登陆<BR>if (uer == null || uer == String.Empty)<BR>{<BR>　//定义cache过期时间<BR><BR>　TimeSpan SessTimeout = new TimeSpan(0, 0, System.Web.HttpContext.Current.Session.Timeout, 0, 0);<BR><BR>　//第一次登陆的时候插入一个用户相关的cache值，<BR>　HttpContext.Current.Cache.Insert(key, key, null, DateTime.MaxValue, SessTimeout, System.Web.Caching.CacheItemPriority.NotRemovable, null);<BR>　Session["ADMINID"] = TextBox1.Text;<BR>　Response.Redirect("main.aspx");<BR>}<BR>else<BR>{<BR>　//重复登陆<BR>　Response.Write("&lt;script&gt;alert(&#39;您的账号已经登陆!&#39;);window.location=&#39;login.aspx&#39;;&lt;/script&gt;");<BR>}</TD></TR></TBODY></TABLE></P>]]></description></item><item><title>[Javascript]用纯javascript实现网页两侧浮动元素</title><link>http://www.donlei.com/forum/dispbbs.asp?BoardID=28&amp;ID=1965&amp;Page=1</link><author>果果</author><pubDate>2007-03-01 22:31:53</pubDate><description><![CDATA[<P>用纯javascript实现网页两侧浮动元素的代码：</P><P>&lt;script language="JavaScript" type="text/javascript"&gt;<BR>&nbsp;&nbsp;&nbsp; var delta=0.15<BR>&nbsp;&nbsp;&nbsp; var collection;<BR>&nbsp;&nbsp;&nbsp; function floaters() {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.items = [];<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.addItem = function(id,x,y,content)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; document.write(&#39;&lt;DIV id=&#39;+id+&#39; style="Z-INDEX: 10; POSITION: absolute;&nbsp; width:80px; height:60px;left:&#39;+(typeof(x)==&#39;string&#39;?eval(x):x)+&#39;;top:&#39;+(typeof(y)==&#39;string&#39;?eval(y):y)+&#39;"&gt;&#39;+content+&#39;&lt;/DIV&gt;&#39;);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var newItem = {};<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; newItem.object = document.getElementById(id);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; newItem.x = x;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; newItem.y = y;</P><P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.items[this.items.length]&nbsp; = newItem;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.play = function()<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; collection = this.items<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; setInterval(&#39;play()&#39;,10);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; function play()<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(screen.width&lt;=800)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(var i=0;i&lt;collection.length;i++)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; collection<i>.object.style.display = &#39;none&#39;;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(var i=0;i&lt;collection.length;i++)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var followObj&nbsp; = collection<i>.object;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var followObj_x&nbsp; = (typeof(collection<i>.x)==&#39;string&#39;?eval(collection<i>.x):collection<i>.x);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var followObj_y&nbsp; = (typeof(collection<i>.y)==&#39;string&#39;?eval(collection<i>.y):collection<i>.y);</P><P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(followObj.offsetLeft!=(document.body.scrollLeft+followObj_x)) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var dx=(document.body.scrollLeft+followObj_x-followObj.offsetLeft)*delta;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dx=(dx&gt;0?1:-1)*Math.ceil(Math.abs(dx));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; followObj.style.left=followObj.offsetLeft+dx;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</P><P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(followObj.offsetTop!=(document.body.scrollTop+followObj_y)) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var dy=(document.body.scrollTop+followObj_y-followObj.offsetTop)*delta;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dy=(dy&gt;0?1:-1)*Math.ceil(Math.abs(dy));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; followObj.style.top=followObj.offsetTop+dy;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; followObj.style.display = &#39;&#39;;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; var theFloaters&nbsp; = new floaters();<BR>&nbsp;&nbsp;&nbsp; theFloaters.addItem(&#39;followDiv1&#39;,&#39;document.body.clientWidth-106&#39;,80,&#39;&lt;a href=http://www.tt93d.com/ target=_blank&gt;&lt;img src=images/img.gif border=0 alt=天天就3D&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;&#39;);<BR>&nbsp;&nbsp;&nbsp; theFloaters.addItem(&#39;followDiv2&#39;,6,80,&#39;&lt;a href=http://www.tt93d.com/ target=_blank&gt;&lt;img src=images/img.gif border=0 alt=天天就3D&gt;&lt;/a&gt;&lt;br&gt;&lt;br&#39;);<BR>&nbsp;&nbsp;&nbsp; theFloaters.play();<BR>&lt;/script&gt;<BR></P>]]></description></item><item><title>[原创]xp下面，如何解决MDI窗口最大化时会遮盖任务栏的问题</title><link>http://www.donlei.com/forum/dispbbs.asp?BoardID=28&amp;ID=1964&amp;Page=1</link><author>果果</author><pubDate>2007-01-11 23:10:15</pubDate><description><![CDATA[　　当主窗口的FormStyle为fsMDIForm，WindowState为wsMax时，Position要设为poDesigened，否则当操作系统为xp，且主题设为xp时，主窗口的状态栏会被任务栏遮盖一部分，整个窗口向屏幕下方移动了几毫米。]]></description></item><item><title>[原创]BDE、ADO对Numeric等字段类型的识别以及精度问题</title><link>http://www.donlei.com/forum/dispbbs.asp?BoardID=28&amp;ID=1963&amp;Page=1</link><author>果果</author><pubDate>2007-01-07 12:38:28</pubDate><description><![CDATA[　　BDE操纵数字类的字段时，要把字段设为float类型，而不要设为Numeric，因为BDE在操纵Numeric时虽会把它认为是TFloatField，但会引起精度问题，而直接把字段设为float类型则不会有此问题。据测试，如果非要用Numeric类型，则连接数据库时把ENABLE BCD改为TRUE，这样，Numeric类型的字段就会变成TbcdField，就不会引起精度问题了。相反的，ADO就不会出现这个问题，能自动识别。]]></description></item><item><title>[.NET]类中如何建立相对地址等问题</title><link>http://www.donlei.com/forum/dispbbs.asp?BoardID=28&amp;ID=1961&amp;Page=1</link><author>果果</author><pubDate>2007-01-06 00:10:59</pubDate><description><![CDATA[<P>在页面文件中可以用server.mappath(),在类中怎么弄呢，在类中建连接是为了方便数据库的修改。要“相对地址”的连接方法。</P><P><BR>有几种方式 : <BR>1.在web.config 文件中包含引用的地址参数,然后在类中获取,具体如下: <BR>这个一个不完整的web.config 我删掉了那些东西 <BR>&lt;?xml version="1.0" encoding="utf-8" ?&gt; <BR>&lt;configuration&gt; <BR>&lt;appSettings&gt; <BR>&lt;add key="ConnectionString" value="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:&#92;xxxxx&#92;xxx&#92;aa.mdb"/&gt; <BR>&lt;/appSettings&gt; <BR>&lt;system.web&gt; <BR>&lt;/system.web&gt; </P><P>&lt;/configuration&gt; <BR>在asp.net页面中获取用: <BR>Dim sconstr As String = ConfigurationSettings.AppSettings("connectionstring") <BR>Dim scon As SqlConnection = New SqlConnection(sconstr) <BR>scon.Open() <BR>方法2.因为server是一个相对于绝对命名空间的值,不能在类中直接引用,可以用绝对引用方式: <BR>dim conn as oledbconnection=new oledbconnection("provider=microsoft.jet.oledb.4.0;data source=" &amp; System.Web.HttpContext.Current.Server.MapPath("txl.mdb")) <BR>方法3:可以用类的属性把路径传递过去,在类中定义一个属性为字符串型,在asp.net页中调用类时,先在页中用server.mappath()获取到路径,然后赋给这个类的这一个路径属性,然后不就可以了吗。</P>]]></description></item><item><title>[Javascript]如何避免广告等javascript脚本调用代码影响网页打开速度</title><link>http://www.donlei.com/forum/dispbbs.asp?BoardID=28&amp;ID=1960&amp;Page=1</link><author>果果</author><pubDate>2006-12-21 00:07:45</pubDate><description><![CDATA[<P>让广告代码不再影响你的网页加载速度</P><P>　&nbsp; 做一些联盟广告时，由于联盟广告的加载慢，整体页面的显示速度也会变慢，如果加入下面的代码就可以有效地解决这个问题。</P><P>　　第一步：把这段代码放在你要放广告的网页位置：</P><P>&lt;span id="myads"&gt;广告载入中...&lt;/span&gt;</P><P>　　第二步：把这段代码放到页底：</P><P>&lt;span id="span_myads"&gt;<BR>这里放广告的JS代码或其他加载速度比较慢的内容都可以.<BR>&lt;/span&gt;</P><P>&lt;script type="text/javascript"&gt;<BR>myads.innerHTML=span_myads.innerHTML;<BR>span_myads.innerHTML="";<BR>&lt;/script&gt;</P>]]></description></item><item><title>[.NET]Web.Config文件各个节点及属性详解</title><link>http://www.donlei.com/forum/dispbbs.asp?BoardID=28&amp;ID=1959&amp;Page=1</link><author>果果</author><pubDate>2006-12-20 10:22:25</pubDate><description><![CDATA[(一).Web.Config是以XML文件规范存储,配置文件分为以下格式<BR>1.配置节处理程序声明<BR>特点： 位于配置文件的顶部，包含在&lt;configSections&gt;标志中。<BR>2.特定应用程序配置<BR>特点: 位于&lt;appSetting&gt;中。 可以定义应用程序的全局常量设置等信息.<BR>3.配置节设置<BR>特点: 位于&lt;system.Web&gt;节中，控制Asp.net运行时的行为.<BR>4.配置节组<BR>特点: 用&lt;sectionGroup&gt;标记，可以自定义分组，可以放到&lt;configSections&gt;内部或其它&lt;sectionGroup&gt;标记的内部.<BR>(二).配置节的每一节<BR>1.&lt;configuration&gt;节<BR>根元素，其它节都是在它的内部.<BR>2.&lt;appSetting&gt;节<BR>此节用于定义应用程序设置项。对一些不确定设置，还可以让用户根据自己实际情况自己设置<BR>用法:<BR>I.<BR>&lt;appSettings&gt;<BR>&lt;add key="Conntction" value="server=192.168.85.66;userid=sa;password=;database=Info;"/&gt;<BR>&lt;appSettings&gt;<BR>定义了一个连接字符串常量，并且在实际应用时可以修改连接字符串，不用修改程式代码.<BR>II.&lt;appSettings&gt;<BR>&lt;add key="ErrPage" value="Error.aspx"/&gt;<BR>&lt;appSettings&gt;<BR>定义了一个错误重定向页面.<BR>3.&lt;compilation&gt;节<BR>格式:<BR>&lt;compilation <BR>defaultLanguage="c#"<BR>debug="true"<BR>/&gt;<BR>I.default language: 定义后台代码语言,可以选择C#和VB.net两种语言.<BR>IIdebug : 为true时，启动aspx调试； 为false不启动aspx调试，因而可以提高应用程序运行<BR>时的性能。 一般程序员在开发时设置为true,交给客户时设置为false.<BR>4.&lt;customErrors&gt;节<BR>格式:<BR>&lt;customErrors <BR>mode="RemoteOnly" <BR>defaultRedirect="error.aspx"<BR>&lt;error statusCode="440" redirect="err440page.aspx"/&gt;<BR>&lt;error statusCode="500" redirect="err500Page.aspx"/&gt;<BR>/&gt; <BR>I.mode : 具有On,Off,RemoteOnly 3种状态。On表示始终显示自定义的信息; Off表示始终显示详细的asp.net错误信息; RemoteOnly表示只对不在本地Web服务器上运行的用户显示自定义信息.<BR>II.defaultRedirect: 用于出现错误时重定向的URL地址. 是可选的<BR>III.statusCode: 指明错误状态码，表明一种特定的出错状态.<BR>IV. redirect:错误重定向的URL.<BR>5.&lt;globalization&gt;节<BR>格式:<BR>&lt;globalization <BR>requestEncoding="utf-8" <BR>responseEncoding="utf-8" <BR>fileEncoding="utf-8"<BR>/&gt; <BR>I.requestEncoding: 它用来检查每一个发来请求的编码. <BR>II.responseEncoding: 用于检查发回的响应内容编码.<BR>III.fileEncoding: 用于检查aspx,asax等文件解析的默认编码. <BR>6.&lt;sessionState&gt;节<BR>格式:<BR>&lt;sessionState <BR>mode="InProc"<BR>stateConnectionString="tcpip=127.0.0.1:42424"<BR>sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes"<BR>cookieless="false" <BR>timeout="20" <BR>/&gt;<BR>I.mode: 分为off,Inproc,StateServer,SqlServer几种状态<BR>这里有详细介绍此属性: <A target=_blank href="http://blog.csdn.net/chengking/archive/2005/10/27/518079.aspx">http://blog.csdn.net/chengking/archive/2005/10/27/518079.aspx</A> <BR>II. stateConnectionString :指定Asp.net应用程序存储远程会话状态的服务器名，默认为本机<BR>III.sqlConnectionString: 当用会话状态数据库时，在这里设置连接字符串<BR>IV. Cookieless: 设置为true时，表示不使用cookie会话状态来标识客户； 否则，相反.<BR>V. TimeOut: 用来定义会话状态存储的时间，超过期限，将自动终止会话.<BR>7.&lt;authentication&gt;节<BR>格式:<BR>&lt;authentication mode="Forms"&gt; <BR>&lt;forms name=".ASPXUSERDEMO" loginUrl="Login.aspx" protection="All" timeout="30"/&gt;<BR>&lt;/authentication&gt;<BR>&lt;authorization&gt;<BR>&lt;deny users="?"/&gt;<BR>&lt;/authorization&gt;<BR>I.Windows: 使用IIS验证方式<BR>II.Forms: 使用基于窗体的验证方式<BR>III.Passport: 采用Passport cookie验证模式<BR>IV.None: 不采用任何验证方式<BR>里面内嵌Forms节点的属性涵义:<BR>I.Name: 指定完成身份验证的Http cookie的名称.<BR>II.LoginUrl: 如果未通过验证或超时后重定向的页面URL，一般为登录页面，让用户重新登录<BR>III.Protection: 指定 cookie数据的保护方式. <BR>可设置为: All None Encryption Validation四种保护方式<BR>a. All表示加密数据，并进行有效性验证两种方式<BR>b. None表示不保护Cookie.<BR>c. Encryption表示对Cookie内容进行加密<BR>d. validation表示对Cookie内容进行有效性验证<BR>IV. TimeOut: 指定Cookie的失效时间. 超时后要重新登录.<BR>]]></description></item><item><title>[Access]Access类似SQL Server的类型转换、取子串以及实现When功能</title><link>http://www.donlei.com/forum/dispbbs.asp?BoardID=28&amp;ID=1958&amp;Page=1</link><author>果果</author><pubDate>2006-12-19 00:12:36</pubDate><description><![CDATA[<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align=left><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">Access</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">里，数据类型转换：<SPAN lang=EN-US><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></SPAN></SPAN></P><P class=MsoBodyText style="MARGIN: 0cm 0cm 0pt"><FONT face=宋体><SPAN lang=EN-US>CBool(expression)<BR>CByte(expression)<BR>CCur(expression)<BR>CDate(expression)<BR>CDbl(expression)<BR>CDec(expression)<BR>CInt(expression)<BR>CLng(expression)<BR>CSng(expression)<BR>CStr(expression)<BR>CVar(expression)</SPAN><SPAN lang=EN-US style="mso-font-kerning: 0pt"><o:p></o:p></SPAN></FONT></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align=left><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt"><o:p>&nbsp;</o:p></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align=left><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">Access</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">里，取子串，<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align=left><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">mid(Expression,N,L)</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">，用法与<SPAN lang=EN-US>SQL Server</SPAN>的<SPAN lang=EN-US>SubString</SPAN>一样。<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align=left><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt"><o:p>&nbsp;</o:p></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align=left><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">Access</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">里，实现像<SPAN lang=EN-US>SQL Server</SPAN>的<SPAN lang=EN-US>When</SPAN>功能：<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align=left><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">iif(Exp,a,b)</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">，意思为：如果满足条件<SPAN lang=EN-US>Exp</SPAN>，则执行<SPAN lang=EN-US>a</SPAN>，否则执行<SPAN lang=EN-US>b</SPAN>。<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P>]]></description></item><item><title>[原创]Delphi及Access开发技巧三则</title><link>http://www.donlei.com/forum/dispbbs.asp?BoardID=28&amp;ID=1957&amp;Page=1</link><author>果果</author><pubDate>2006-12-17 00:32:00</pubDate><description><![CDATA[<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align=left><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">一、关于<SPAN lang=EN-US>IntraWeb</SPAN>的<SPAN lang=EN-US>ScriptEvents</SPAN>：<SPAN lang=EN-US><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></SPAN></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align=left><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">在这样的事件里操作窗口中的控件时，控件名必须大写，且控件名后面一般要加上<SPAN lang=EN-US>IWCL</SPAN>，比如<SPAN lang=EN-US>iwBtnClose</SPAN>，那么在在该<SPAN lang=EN-US>js</SPAN>中就要写<SPAN lang=EN-US>IWBTNCLOSEIWCL</SPAN>，编辑框一般用<SPAN lang=EN-US>value</SPAN>，而不是<SPAN lang=EN-US>text</SPAN>；语法与<SPAN lang=EN-US>java</SPAN>一致，区分大小写。不能操纵<SPAN lang=EN-US>Visible</SPAN>为<SPAN lang=EN-US>False</SPAN>的控件。关于一些控件名、控件属性等可以查看页面的源文件。<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align=left><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt"><o:p>&nbsp;</o:p></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align=left><SPAN lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt">二、&nbsp;Access</SPAN><SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt">数据库中，关于<SPAN lang=EN-US>DateTime</SPAN>（日期）类型字段的查询，一定要用<SPAN lang=EN-US>#</SPAN>号，否则查询结果会不准确。如<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align=left><SPAN lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt">‘FDate &gt;= #<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /><st1:chsdate w:st="on" IsROCDate="False" IsLunarDate="False" Day="1" Month="1" Year="2005">2005-01-01</st1:chsdate>#‘</SPAN><SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt">。<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align=left><SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt">如果字段中的值是“<SPAN lang=EN-US>2006-8-26 23:29:<st1:chmetcnv w:st="on" UnitName="”" SourceValue="51" HasSpace="False" Negative="False" NumberType="1" TCSC="0">51<SPAN lang=EN-US><SPAN lang=EN-US>”</SPAN></SPAN></st1:chmetcnv><SPAN lang=EN-US>格式的，则SQL</SPAN></SPAN>语句要写成这样：<SPAN lang=EN-US>FDate&gt;=#08/26/2006 23:29:51#<o:p></o:p></SPAN></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align=left><SPAN lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt"><o:p>&nbsp;</o:p></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align=left><SPAN lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt"><o:p>&nbsp;</o:p></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align=left><SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt">三、当主窗口的<SPAN lang=EN-US>FormStyle</SPAN>为<SPAN lang=EN-US>fsMDIForm</SPAN>，<SPAN lang=EN-US>WindowState</SPAN>为<SPAN lang=EN-US>wsMax</SPAN>时，<SPAN lang=EN-US>Position</SPAN>要设为<SPAN lang=EN-US>poDesigened</SPAN>，否则当操作系统为<SPAN lang=EN-US>xp</SPAN>，且主题设为<SPAN lang=EN-US>xp</SPAN>时，主窗口的状态栏会被任务栏遮盖一部分，整个窗口向屏幕下方移动了几毫米。<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P>]]></description></item><item><title>[MSSQL]SQL Server的sq_executesql系统存储过程的使用方法</title><link>http://www.donlei.com/forum/dispbbs.asp?BoardID=28&amp;ID=1956&amp;Page=1</link><author>果果</author><pubDate>2006-12-16 00:11:44</pubDate><description><![CDATA[<P>SQL Server的sq_executesql系统存储过程的使用方法：</P><P>&nbsp; declare @ssql nvarchar(200)<BR>&nbsp; declare @iik int <BR>&nbsp; set @ssql=N&#39;select @iik=(select count(*) from aaa)&#39;<BR>&nbsp; execute sp_executesql @ssql,N&#39;@iik int output&#39;,@iik output<BR>&nbsp; select @iik<BR></P>]]></description></item><item><title>[原创]关于ADO连接Paradox等数据库会出乱码问题的解决方法</title><link>http://www.donlei.com/forum/dispbbs.asp?BoardID=28&amp;ID=1955&amp;Page=1</link><author>果果</author><pubDate>2006-12-15 00:14:20</pubDate><description><![CDATA[<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align=left><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">关于<SPAN lang=EN-US>ADO</SPAN>连<SPAN lang=EN-US>Paradox</SPAN>出现乱码问题的解决方法：</SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align=left><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">其中这个问题再简单不过了。</SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align=left><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">表结构中有一个<SPAN lang=EN-US>Table Lanague</SPAN>要改为<SPAN lang=EN-US>Paradox China 936</SPAN>即可。如果是用<SPAN lang=EN-US>bde</SPAN>创建的表，又用<SPAN lang=EN-US>ado</SPAN>来连接，那么在创建表之前把<SPAN lang=EN-US>BDE</SPAN>配置中的<SPAN lang=EN-US>Drivers</SPAN>—<SPAN lang=EN-US>Native</SPAN>—<SPAN lang=EN-US>Paradox</SPAN>—<SPAN lang=EN-US>LangDriver</SPAN>，一项改为<SPAN lang=EN-US>Paradox China 936</SPAN>更方便，这样创建出来的表的<SPAN lang=EN-US>Table Lanague</SPAN>都为<SPAN lang=EN-US>Paradox China 936</SPAN>了。<SPAN lang=EN-US><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></SPAN></SPAN></P>]]></description></item><item><title>[.NET]ASP.NET如何读取并重写文本文件(C#代码)</title><link>http://www.donlei.com/forum/dispbbs.asp?BoardID=28&amp;ID=1954&amp;Page=1</link><author>果果</author><pubDate>2006-12-13 09:17:56</pubDate><description><![CDATA[<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FileStream fs = new FileStream(new dmgClass().getcomFilePath("wr&#92;&#92;data") + ".txt", FileMode.Open);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; StreamReader sr = new StreamReader(fs);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; StringBuilder sb = new StringBuilder();</P><P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; StreamWriter sw = new StreamWriter(new FileStream(new dmgClass().getcomFilePath("wr&#92;&#92;data_new") + ".txt", FileMode.CreateNew));</P><P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while (sr.Peek() &gt;= 0)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sb = new StringBuilder();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sb.Append("update wr_hisdata set FDate=");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string sline = sr.ReadLine();</P><P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string[] arrVal = new string[4];<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int ik = 0;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; foreach (string sval in sline.Split(new char[] { &#39;,&#39; }))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; arrVal[ik] = sval;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ik++;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sb.Append("&#39;" + arrVal[0] + "&#39;,");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sb.Append("MachineBall=" + arrVal[1] + ",");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sb.Append("TestMachineNo=" + arrVal[2] + "");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sb.Append(" where lottype=1 and FNo=" + arrVal[3] + "");</P><P><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sw.WriteLine(sb.ToString());<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; finally<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sr.Close();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sr.Dispose();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fs.Close();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sw.Close();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sw.Dispose();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR></P>]]></description></item><item><title>[.NET]ASP.NET实现页面参数传递的几种方法</title><link>http://www.donlei.com/forum/dispbbs.asp?BoardID=28&amp;ID=1953&amp;Page=1</link><author>果果</author><pubDate>2006-12-12 21:05:38</pubDate><description><![CDATA[<P>.net页面间的参数传递简单实例</P><P>使用QueryString </P><P>　　使用QuerySting在页面间传递值已经是一种很老的机制了，这种方法的主要优点是实现起来非常简单，然而它的缺点是传递的值是会显示在浏览器的地址栏上的（不安全），同时又不能传递对象，但是在传递的值少而安全性要求不高的情况下，这个方法还是一个不错的方案。使用这种方法的步骤如下: </P><P>　　1，使用控件创建web表单（form） </P><P>　　2，创建可以返回表单的按钮和链接按钮 </P><P>　　3，在按钮或链接按钮的单击事件里创建一个保存URL的字符变量 </P><P>　　4，在保存的URL里添加QueryString参数 </P><P>　　5，使用Response.Redirect重定向到上面保存的URL </P><P>　　下面的代码片断演示了如何实现这个方法： </P><P>　　源页面代码： </P><P>　　private void Button1_Click </P><P>　　(object sender, System.EventArgs e) </P><P>　　{ </P><P>　　string url; </P><P>　　url="anotherwebform.aspx?name=" + TextBox1.Text + "&amp;email=" + TextBox2.Text; </P><P>　　Response.Redirect(url); </P><P>　　} </P><P>　　目标页面代码： </P><P>　　private void Page_Load </P><P>　　(object sender, System.EventArgs e) </P><P>　　{ </P><P>　　Label1.Text=Request.QueryString["name"]; </P><P>　　Label2.Text=Request.QueryString["email"]; </P><P>　　}　　 </P><P>　　使用Session变量 </P><P>　　使用Session变量是可以在页面间传递值的的另一种方式，在本例中我们把控件中的值存在Session变量中，然后在另一个页面中使用它，以不同页面间实现值传递的目的。但是，需要注意的是在Session变量存储过多的数据会消耗比较多的服务器资源，在使用session时应该慎重，当然了，我们也应该使用一些清理动作来去除一些不需要的session来降低资源的无谓消耗。使用Session变量传递值的一般步骤如下： </P><P>　　1，在页面里添加必要的控件 </P><P>　　2，创建可以返回表单的按钮和链接按钮 </P><P>　　3，在按钮或链接按钮的单击事件里，把控件的值添加到session变量里 </P><P>　　4，使用Response.Redirect方法重定向到另一个页面 </P><P>　　5，在另一个页面提取session的值，在确定不需要使用该session时，要显式清除它 </P><P>　　下面的代码片断演示了如何实现这个方法： </P><P>　　源页面代码： </P><P>　　private void Button1_Click </P><P>　　(object sender, System.EventArgs e) </P><P>　　{ </P><P>　　//textbox1 and textbox2 are webform </P><P>　　//controls </P><P>　　Session["name"]=TextBox1.Text; </P><P>　　Session["email"]=TextBox2.Text; </P><P>　　Server.Transfer("anotherwebform.aspx"); </P><P>　　} </P><P>　　目标页面代码： </P><P>　　private void Page_Load </P><P>　　(object sender, System.EventArgs e) </P><P>　　{ </P><P>　　Label1.Text=Session["name"].ToString(); </P><P>　　Label2.Text=Session["email"].ToString(); </P><P>　　Session.Remove("name"); </P><P>　　Session.Remove("email"); </P><P>　　}　　 </P><P>　　使用Server.Transfer </P><P>　　这个方法相比上面介绍的方法稍微复杂一点，但在页面间值传递中却是特别有用的，使用该方法你可以在另一个页面以对象属性的方式来存取显露的值，当然了，使用这种方法，你需要额外写一些代码以创建一些属性以便可以在另一个页面访问它，但是，这个方式带来的好处也是显而易见的。总体来说，使用这种方法是简洁的同时又是面向对象的。使用这种方法的整个过程如下： </P><P>　　1，在页面里添加必要的控件 </P><P>　　2，创建返回值的Get属性过程 </P><P>　　3，创建可以返回表单的按钮和链接按钮 </P><P>　　4，在按钮单击事件处理程序中调用Server.Transfer方法转移到指定的页面 </P><P>　　5，在第二个页面中，我们就可以使用Context.Handler属性来获得前一个页面实例对象的引用，通过它，就可以使用存取前一个页面的控件的值了 </P><P>　　以下代码综合实现上述步骤过程的代码：<BR>源页面代码: </P><P>　　把以下的代码添加到页面中 </P><P>　　public string Name </P><P>　　{ </P><P>　　get </P><P>　　{ </P><P>　　return TextBox1.Text; </P><P>　　} </P><P>　　}　　 </P><P>　　public string EMail </P><P>　　{ </P><P>　　get </P><P>　　{ </P><P>　　return TextBox2.Text; </P><P>　　} </P><P>　　} </P><P>　　然后调用Server.Transfer方法 </P><P>　　private void Button1_Click </P><P>　　(object sender, System.EventArgs e) </P><P>　　{ </P><P>　　Server.Transfer("anotherwebform.aspx"); </P><P>　　} </P><P>　　目标页面代码： </P><P>　　private void Page_Load </P><P>　　(object sender, System.EventArgs e) </P><P>　　{ </P><P>　　//create instance of source web form </P><P>　　WebForm1 wf1; </P><P>　　//get reference to current handler instance </P><P>　　wf1=(WebForm1)Context.Handler; </P><P>　　Label1.Text=wf1.Name; </P><P>　　Label2.Text=wf1.EMail; </P><P>　　} <BR>　　 </P><P>　　在ASP.NET 2.0中启用了跨页面传送功能，其功能和用法在以后在做介绍！　　 </P><P>　　页面之间传递值　　 </P><P>　　方式1：　　 </P><P>　　在接收页 的html代码里加上一行： 　　 </P><P>　　WebForm1 fp=(WebForm1)Context.Handler; </P><P>　　this.TextBox1.Text=fp.name; //name 是第一页的public变量　　 </P><P>　　Context 提供对整个当前上下文（包括请求对象）的访问。您可以使用此类共享页之间的信息。 </P><P>　　方式2：GET方式 </P><P>在发送页 </P><P>　　 public int sum=0;　　 </P><P>　　 int i =int.Parse(this.TextBox1.Text)*2;　　 </P><P>　　 Server.Transfer("WebForm2.aspx?sum="+i);　　 </P><P>　　 接收页 </P><P>　　 this.TextBox1.Text=Request["sum"].ToString(); </P><P>　　 or this.TextBox1.Text=Request.Params["sum"].ToString(); </P><P>　　 this.TextBox1.Text=Request.QueryString["sum"]; <BR>　　 </P><P>　　方法3：全局变量　　 </P><P>　　 发送页： </P><P>　　 Application["sum"]=this.TextBox1.Text; </P><P>　　 Server.Transfer("WebForm2.aspx");　　 </P><P>　　 接收页： </P><P>　　 this.TextBox1.Text=(string)Application["sum"];　　 </P><P>　　Application实质上是整个虚拟目录中所有文件的集合，如果想在整个应用范围内使用某个变量值，Application对象将是最佳的选择　　 </P><P>　　在这里用Session[""]的方法雷同　　 </P><P>　　方法4： </P><P>　　 发送页： </P><P>　　 1.定义静态变量： public static string str=""; </P><P>　　 2. str=this.TextBox1.Text; </P><P>　　 Server.Transfer("webform2.aspx"); </P><P>　　 接收页： </P><P>　　 1.引入第一页的命名空间：using WebApplication1; </P><P>　　 2 this.TextBox1.Text=WebForm1.str;<BR></P>]]></description></item><item><title>[Access]Access数据库表各种字段类型的规格</title><link>http://www.donlei.com/forum/dispbbs.asp?BoardID=28&amp;ID=1952&amp;Page=1</link><author>果果</author><pubDate>2006-12-11 00:16:35</pubDate><description><![CDATA[Microsoft Access 数据库表规格<BR>属性 最大值 <BR>表名的字符个数 64 <BR>字段名的字符个数 64 <BR>表中字段个数 255 <BR>打开表的个数 2,048。实际可打开的表的数目可能会少一些，因为 Microsoft Access 还要打开一些内部的表。 <BR>表的大小 1G 字节 <BR>文本字段的字符个数 255 <BR>备注字段的字符个数 通过用户界面输入为 65,535，通过程序输入为 1G 字节。 <BR>OLE 对象字段的大小 1G 字节 <BR>表中索引个数 32 <BR>索引中的字段个数 10 <BR>有效性消息的字符个数 255 <BR>有效性规则的字符个数 2,048 <BR>表或字段说明的字符个数 255 <BR>记录的字符个数（除了备注字段和 OLE 对象字段） 2,000 <BR>字段属性设置的字符个数 255 <BR>]]></description></item><item><title>[.NET]StringBuilder的实现与技巧</title><link>http://www.donlei.com/forum/dispbbs.asp?BoardID=28&amp;ID=1951&amp;Page=1</link><author>果果</author><pubDate>2006-12-10 00:09:22</pubDate><description><![CDATA[<P align=center><FONT size=3><STRONG>StringBuilder的实现与技巧</STRONG> </FONT></P><P><BR>　　在了解String 中,发现了string的不便之处,而string的替代解决方案就是StringBuilder的使用..它的使用也很简单System.Text.StringBuilder sb = new System.Text.StringBuilder();这样就初始化了一个StringBuilder ..之后我们可以通过Append()来追加字符串填充到sb中..在你初始化一个StringBuilder 之后,它会自动申请一个默认的StringBuilder 容量(默认值是16),这个容量是由Capacity来控制的.并且允许,我们根据需要来控制Capacity的大小,也可以通过Length来获取或设置StringBuilder 的长度..<BR>先来看Length的用法:<BR>1 System.Text.StringBuilder sb = new System.Text.StringBuilder();<BR>2 sb.Append( "123456789" );//添加一个字符串<BR>3 sb.Length = 3;//设置容量为3<BR>4 Console.WriteLine( sb.ToString() );//这里输出:123<BR>5 <BR>6 sb.Length = 30;//重新设置容量为30<BR>7 Console.WriteLine( sb.ToString() + ",结尾");//这里在原来字符串后面补齐空格,至到Length的为30<BR>8 Console.WriteLine( sb.Length );//这里输出的长度为30</P><P>通过上面的代码,我们可以看出如果StringBuilder 中的字符长度小于Length的值,则StringBuilder 将会用空格硬填充StringBuilder ,以满足符合长度的设置..如果StringBuilder 中的字符长度大于Length的值,则StringBuilder 将会截取从第一位开始的Length个字符..而忽略超出的部分..</P><P>再来看看最重要的部分Carpacity的用法:<BR>&nbsp;1 System.Text.StringBuilder sb = new System.Text.StringBuilder();//初始化一个StringBuilder<BR>&nbsp;2 Console.Write( "Capacity:" + sb.Capacity );//这里的Capacity会自动扩大<BR>&nbsp;3 Console.WriteLine( "&#92;t Length:" + sb.Length );<BR>&nbsp;4 <BR>&nbsp;5 sb.Append( &#39;1&#39;,17 );//添加一个字符串,这里故意添加17个字符,是为了看到Capacity是如何被扩充的<BR>&nbsp;6 Console.Write( "Capacity:" + sb.Capacity );//这里的Capacity会自动扩大<BR>&nbsp;7 Console.WriteLine( "&#92;t Length:" + sb.Length );<BR>&nbsp;8 <BR>&nbsp;9 sb.Append( &#39;2&#39;,32 );//添加一个字符串<BR>10 Console.Write( "Capacity:" + sb.Capacity );//这里的Capacity会自动扩大<BR>11 Console.WriteLine( "&#92;t Length:" + sb.Length );<BR>12 <BR>13 sb.Append( &#39;3&#39;,64 );//添加一个字符串<BR>14 Console.Write( "Capacity:" + sb.Capacity );//这里的Capacity会自动扩大<BR>15 Console.WriteLine( "&#92;t Length:" + sb.Length );<BR>16 <BR>17 //注意这里:如果你取消Remove这步操作,将会引发ArgumentOutOfRangeException异常,因为当前容量小于<BR>18 <BR>19 //Length,这在自己控制StringBuilder的时候务必要注意容量溢出的问题<BR>20 <BR>21 sb.Remove(0,sb.Length);//移出全部内容,再测试<BR>22 sb.Capacity = 1;//重新定义了容量<BR>23 sb.Append( &#39;a&#39;,2 );<BR>24 Console.Write( "Capacity:" + sb.Capacity );//这里的Capacity会自动扩大<BR>25 Console.WriteLine( "&#92;t Length:" + sb.Length );<BR>26 <BR>27 sb.Append( &#39;b&#39;,4 );<BR>28 Console.Write( "Capacity:" + sb.Capacity );//这里的Capacity会自动扩大<BR>29 Console.WriteLine( "&#92;t Length:" + sb.Length );<BR>30 <BR>31 sb.Append( &#39;c&#39;,6 );<BR>32 Console.Write( "Capacity:" + sb.Capacity );//这里的Capacity会自动扩大<BR>33 Console.WriteLine( "&#92;t Length:" + sb.Length</P><P>上面的代码输出的结果:<BR>1 Capacity:16&nbsp;&nbsp;&nbsp;&nbsp; Length:0&nbsp;&nbsp;&nbsp; //输出第一次,默认的Capacity是16<BR>2 Capacity:32&nbsp;&nbsp;&nbsp;&nbsp; Length:17&nbsp;&nbsp;&nbsp; //第二次,我们故意添加了17个字符,于是Capacity=Capacity*2<BR>3 Capacity:64&nbsp;&nbsp;&nbsp;&nbsp; Length:49&nbsp;&nbsp;&nbsp; //继续超出,则Capacity=Capacity*2<BR>4 Capacity:128&nbsp;&nbsp;&nbsp;&nbsp; Length:113<BR>5 Capacity:3&nbsp;&nbsp;&nbsp;&nbsp; Length:2&nbsp;&nbsp;&nbsp; //清空内容后,设置Capacity=1,重新添加了字符<BR>6 Capacity:7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Length:6&nbsp;&nbsp;&nbsp; //后面的结果都类似<BR>7 Capacity:14&nbsp;&nbsp;&nbsp;&nbsp; Length:12</P><P>从上面的代码和结果可以说明StringBuilder中容量Capacity是如何增加的:创建一个StringBuilder之后,默认的Capacity初始化为16,接着我们添加17个字符,以方便看到Capacity的扩充后的值..大家在修改Capacity的时候,一定要注意21行的注释,一定要确保Capacity &gt;= Length,否则会引发ArgumentOutOfRangeException异常...看完结果,就可以推断出Capacity的公式:<BR>if ( Capacity &lt; Length &amp;&amp; Capacity &gt; 0 ){<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Capacity *= 2;<BR>}<BR>OK..看到公式就明白了..StringBuilder是以当前的Capacity*2来扩充的..所以,在使用StringBuilder需要特别注意,尤其是要拼接或追加N多字符的时候,要注意技巧的使用,可以适当的,有预见性的设置Capacity的值,避免造成过大内存的浪费,节约无谓的内存空间..例如,下列代码就可以根据情况自动的扩展,而避免了较大的内存浪费.<BR>&nbsp;1 System.Text.StringBuilder sb = new System.Text.StringBuilder();<BR>&nbsp;2 int i = 0;<BR>&nbsp;3 long StartTime&nbsp; = DateTime.Now.Ticks;<BR>&nbsp;4&nbsp; while ( i &lt; 100000 ) {<BR>&nbsp;5 sb.Append( i.ToString() );<BR>&nbsp;6 i++;<BR>&nbsp;7 }<BR>&nbsp;8 long EndTime&nbsp; = DateTime.Now.Ticks;<BR>&nbsp;9 <BR>10 Console.WriteLine( "时间:" + ( EndTime-StartTime ) + "&#92;t Capacity:"+ sb.Capacity + "&#92;t Length:" <BR>11 <BR>12 + sb.Length);<BR>13 <BR>14 System.Text.StringBuilder sb1 = new System.Text.StringBuilder();<BR>15 i = 0;<BR>16 StartTime&nbsp; = DateTime.Now.Ticks;<BR>17 while ( i &lt; 100000 ) <BR>18&nbsp; {<BR>19 if ( sb1.Capacity &lt;= sb1.Length )//先判断是否&gt;Length<BR>20 sb1.Capacity += 7;//这里一定要根据情况的增加容量,否则会有性能上的消耗<BR>21 sb1.Append( i.ToString() );<BR>22 i++;<BR>23 }<BR>24 EndTime&nbsp; = DateTime.Now.Ticks;<BR>25 <BR>26 Console.WriteLine( "时间:" + ( EndTime-StartTime ) + "&#92;t Capacity:"+ sb1.Capacity + "&#92;t <BR>27 <BR>28 Length:" + sb1.Length);<BR>需要特别说明的一点是,自动增加的容量,一定要根据实际预见的情况而改变,否则不但起不到优化的作用,反而会影响到程序的性能..</P><P><BR>另外,如果有时间的话,可以测试一下下面的代码,用string和StringBuilder拼接字符串的区别..你会吓到的!!<BR>&nbsp;1 System.Text.StringBuilder sb = new System.Text.StringBuilder();<BR>&nbsp;2 int i = 0;<BR>&nbsp;3 long StartTime&nbsp; = DateTime.Now.Ticks;<BR>&nbsp;4&nbsp; while ( i &lt; 100000 ) {<BR>&nbsp;5 sb.Append( i.ToString() );<BR>&nbsp;6 i++;<BR>&nbsp;7 }<BR>&nbsp;8 long EndTime&nbsp; = DateTime.Now.Ticks;<BR>&nbsp;9 <BR>10 Console.WriteLine( "时间:" + ( EndTime-StartTime ) );<BR>11 <BR>12 string sb1 = null;<BR>13 i = 0;<BR>14 StartTime&nbsp; = DateTime.Now.Ticks;<BR>15 while ( i &lt; 100000 ) <BR>16&nbsp; {<BR>17 sb1 += i;<BR>18 i++;<BR>19 }<BR>20 EndTime&nbsp; = DateTime.Now.Ticks;<BR>21 Console.WriteLine( "时间:" + ( EndTime-StartTime ));</P><P>&nbsp;</P>]]></description></item><item><title>[.NET]ASP.NET性能优化的方法</title><link>http://www.donlei.com/forum/dispbbs.asp?BoardID=28&amp;ID=1950&amp;Page=1</link><author>果果</author><pubDate>2006-12-09 10:37:22</pubDate><description><![CDATA[<P>ASP.NET优化性能的方法<BR>1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 数据库访问性能优化 </P><P>　　数据库的连接和关闭 </P><P>　　访问数据库资源需要创建连接、打开连接和关闭连接几个操作。这些过程需要多次与数据库交换信息以通过身份验证，比较耗费服务器资源。ASP.NET中提供了连接池（Connection Pool）改善打开和关闭数据库对性能的影响。系统将用户的数据库连接放在连接池中，需要时取出，关闭时收回连接，等待下一次的连接请求。 </P><P>&nbsp; </P><P>　　连接池的大小是有限的，如果在连接池达到最大限度后仍要求创建连接，必然大大影响性能。因此，在建立数据库连接后只有在真正需要操作时才打开连接，使用完毕后马上关闭，从而尽量减少数据库连接打开的时间，避免出现超出连接限制的情况。 </P><P>&nbsp; </P><P>　　使用存储过程 </P><P>　　存储过程是存储在服务器上的一组预编译的SQL语句，类似于DOS系统中的批处理文件。存储过程具有对数据库立即访问的功能，信息处理极为迅速。使用存储过程可以避免对命令的多次编译，在执行一次后其执行规划就驻留在高速缓存中，以后需要时只需直接调用缓存中的二进制代码即可。 </P><P>&nbsp; </P><P>　　另外，存储过程在服务器端运行，独立于ASP.NET程序，便于修改，最重要的是它可以减少数据库操作语句在网络中的传输。 </P><P>&nbsp; </P><P>　　优化查询语句 </P><P>ASP.NET中ADO连接消耗的资源相当大，SQL语句运行的时间越长，占用系统资源的时间也越长。因此，尽量使用优化过的SQL语句以减少执行时间。比如，不在查询语句中包含子查询语句，充分利用索引等。 </P><P>&nbsp; </P><P>2.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 字符串操作性能优化 </P><P>　　使用值类型的ToString方法 </P><P>　　在连接字符串时，经常使用"+"号直接将数字添加到字符串中。这种方法虽然简单，也可以得到正确结果，但是由于涉及到不同的数据类型，数字需要通过装箱操作转化为引用类型才可以添加到字符串中。但是装箱操作对性能影响较大，因为在进行这类处理时，将在托管堆中分配一个新的对象，原有的值复制到新创建的对象中。 </P><P>　　使用值类型的ToString方法可以避免装箱操作，从而提高应用程序性能。 </P><P><BR>　　运用StringBuilder类 </P><P>　　String类对象是不可改变的，对于String对象的重新赋值在本质上是重新创建了一个String对象并将新值赋予该对象，其方法ToString对性能的提高并非很显著。 </P><P>&nbsp; </P><P>　　在处理字符串时，最好使用StringBuilder类，其.NET 命名空间是System.Text。该类并非创建新的对象，而是通过Append，Remove，Insert等方法直接对字符串进行操作，通过ToString方法返回操作结果。 </P><P>&nbsp; </P><P>　　其定义及操作语句如下所示： </P><P>int num; </P><P>System.Text.StringBuilder str = new System.Text.StringBuilder(); //创建字符串 </P><P>str.Append(num.ToString()); //添加数值num </P><P>Response.Write(str.ToString); //显示操作结果 </P><P>&nbsp; </P><P>3.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 优化 Web 服务器计算机和特定应用程序的配置文件以符合您的特定需要 </P><P>　　默认情况下，ASP.NET 配置被设置成启用最广泛的功能并尽量适应最常见的方案。因此，应用程序开发人员可以根据应用程序所使用的功能，优化和更改其中的某些配置，以提高应用程序的性能。下面的列表是您应该考虑的一些选项。 </P><P>　　仅对需要的应用程序启用身份验证。默认情况下，身份验证模式为 Windows，或集成 NTLM。大多数情况下，对于需要身份验证的应用程序，最好在 Machine.config 文件中禁用身份验证，并在 Web.config 文件中启用身份验证。 </P><P>　　根据适当的请求和响应编码设置来配置应用程序。ASP.NET 默认编码格式为 UTF-8。如果您的应用程序为严格的 ASCII，请配置应用程序使用 ASCII 以获得稍许的性能提高。 </P><P>　　考虑对应用程序禁用 AutoEventWireup。在 Machine.config 文件中将 AutoEventWireup 属性设置为 false，意味着页面不将方法名与事件进行匹配和将两者挂钩（例如 Page_Load）。如果页面开发人员要使用这些事件，需要在基类中重写这些方法（例如，需要为页面加载事件重写 Page.OnLoad，而不是使用 Page_Load 方法）。如果禁用 AutoEventWireup，页面将通过将事件连接留给页面作者而不是自动执行它，获得稍许的性能提升。 </P><P>　　从请求处理管线中移除不用的模块。默认情况下，服务器计算机的 Machine.config 文件中 &lt;httpModules&gt; 节点的所有功能均保留为激活。根据应用程序所使用的功能，您可以从请求管线中移除不用的模块以获得稍许的性能提升。检查每个模块及其功能，并按您的需要自定义它。 </P><P>例如，如果您在应用程序中不使用会话状态和输出缓存，则可以从 &lt;httpModules&gt; 列表中移除它们，以便请求在不执行其他有意义的处理时，不必执行每个模块的进入和离开代码。 </P><P>&nbsp; </P><P>4.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 一定要禁用调试模式 </P><P>在部署生产应用程序或进行任何性能测量之前，始终记住禁用调试模式。如果启用了调试模式，应用程序的性能可能受到非常大的影响。 </P><P>&nbsp; </P><P>5.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 对于广泛依赖外部资源的应用程序，请考虑在多处理器计算机上启用网络园艺 </P><P>ASP.NET 进程模型帮助启用多处理器计算机上的可缩放性，将工作分发给多个进程（每个 CPU 一个），并且每个进程都将处理器关系设置为其 CPU。此技术称为网络园艺。如果应用程序使用较慢的数据库服务器或调用具有外部依赖项的 COM 对象（这里只是提及两种可能性），则为您的应用程序启用网络园艺是有益的。但是，在决定启用网络园艺之前，您应该测试应用程序在网络园中的执行情况。 </P><P>&nbsp; </P><P>6.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 只要可能，就缓存数据和页输出 </P><P>ASP.NET 提供了一些简单的机制，它们会在不需要为每个页请求动态计算页输出或数据时缓存这些页输出或数据。另外，通过设计要进行缓存的页和数据请求（特别是在站点中预期将有较大通讯量的区域），可以优化这些页的性能。与 .NET Framework 的任何 Web 窗体功能相比，适当地使用缓存可以更好的提高站点的性能，有时这种提高是超数量级的。 </P><P>使用 ASP.NET 缓存机制有两点需要注意。首先，不要缓存太多项。缓存每个项均有开销，特别是在内存使用方面。不要缓存容易重新计算和很少使用的项。其次，给缓存的项分配的有效期不要太短。很快到期的项会导致缓存中不必要的周转，并且经常导致更多的代码清除和垃圾回收工作。若关心此问题，请监视与 ASP.NET Applications 性能对象关联的 Cache Total Turnover Rate 性能计数器。高周转率可能说明存在问题，特别是当项在到期前被移除时。这也称作内存压力。 </P><P>&nbsp; </P><P>7.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 选择适合页面或应用程序的数据查看机制 </P><P>根据您选择在 Web 窗体页显示数据的方式，在便利和性能之间常常存在着重要的权衡。例如，DataGrid Web 服务器控件可能是一种显示数据的方便快捷的方法，但就性能而言它的开销常常是最大的。在某些简单的情况下，您通过生成适当的 HTML 自己呈现数据可能很有效，但是自定义和浏览器定向会很快抵销所获得的额外功效。Repeater Web 服务器控件是便利和性能的折衷。它高效、可自定义且可编程。 </P><P>&nbsp; </P><P>8.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 将 SqlDataReader 类用于快速只进数据游标 </P><P>SqlDataReader 类提供了一种读取从 SQL Server 数据库检索的只进数据流的方法。如果当创建 ASP.NET 应用程序时出现允许您使用它的情况，则 SqlDataReader 类提供比 DataSet 类更高的性能。情况之所以这样，是因为 SqlDataReader 使用 SQL Server 的本机网络数据传输格式从数据库连接直接读取数据。另外，SqlDataReader 类实现 IEnumerable 接口，该接口也允许您将数据绑定到服务器控件。有关更多信息，请参见 SqlDataReader 类。有关 ASP.NET 如何访问数据的信息，请参见通过 ASP.NET 访问数据。 </P><P>&nbsp; </P><P>9.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 将 SQL Server 存储过程用于数据访问 </P><P>在 .NET Framework 提供的所有数据访问方法中，基于 SQL Server 的数据访问是生成高性能、可缩放 Web 应用程序的推荐选择。使用托管 SQL Server 提供程序时，可通过使用编译的存储过程而不是特殊查询获得额外的性能提高。 </P><P>&nbsp; </P><P>10.&nbsp;&nbsp; 避免单线程单元 (STA) COM 组件 </P><P>默认情况下，ASP.NET 不允许任何 STA COM 组件在页面内运行。若要运行它们，必须在 .aspx 文件内将 ASPCompat=true 属性包含在 @ Page 指令中。这样就将执行用的线程池切换到 STA 线程池，而且使 HttpContext 和其他内置对象可用于 COM 对象。前者也是一种性能优化，因为它避免了将多线程单元 (MTA) 封送到 STA 线程的任何调用。 </P><P>使用 STA COM 组件可能大大损害性能，应尽量避免。若必须使用 STA COM 组件，如在任何 interop 方案中，则应在执行期间进行大量调用并在每次调用期间发送尽可能多的信息。另外，小心不要在构造页面期间创建任何 STA COM 组件。例如下面的代码中，在页面构造时将实例化由某个线程创建的 MySTAComponent，而该线程并不是将运行页面的 STA 线程。这可能对性能有不利影响，因为要构造页面就必须完成 MTA 和 STA 线程之间的封送处理。 </P><P>&nbsp; </P><P>&lt;%@ Page Language="VB" ASPCompat="true" %&gt; </P><P>&lt;script runat=server&gt; </P><P>Dim myComp as new MySTAComponent() </P><P>Public Sub Page_Load() </P><P>myComp.Name = "Bob" </P><P>End Sub </P><P>&lt;/script&gt; </P><P>&lt;html&gt; </P><P>&lt;% </P><P>Response.Write(myComp.SayHello) </P><P>%&gt; </P><P>&lt;/html&gt; </P><P>&nbsp; </P><P>首选机制是推迟对象的创建，直到以后在 STA 线程下执行上述代码，如下面的例子所示。 </P><P>&nbsp; </P><P>&lt;%@ Page Language="VB" ASPCompat="true" %&gt; </P><P>&lt;script runat=server&gt; </P><P>Dim myComp </P><P>Public Sub Page_Load() </P><P>myComp = new MySTAComponent() </P><P>myComp.Name = "Bob" </P><P>End Sub </P><P>&lt;/script&gt; </P><P>&lt;html&gt; </P><P>&lt;% </P><P>Response.Write(myComp.SayHello) </P><P>%&gt; </P><P>&lt;/html&gt; </P><P>&nbsp; </P><P>推荐的做法是在需要时或者在 Page_Load 方法中构造任何 COM 组件和外部资源。 </P><P>&nbsp; </P><P>永远不要将任何 STA COM 组件存储在可以由构造它的线程以外的其他线程访问的共享资源里。这类资源包括像缓存和会话状态这样的资源。即使 STA 线程调用 STA COM 组件，也只有构造此 STA COM 组件的线程能够实际为该调用服务，而这要求封送处理对创建者线程的调用。此封送处理可能产生重大的性能损失和可伸缩性问题。在这种情况下，请研究一下使 COM 组件成为 MTA COM 组件的可能性，或者更好的办法是迁移代码以使对象成为托管对象。 </P><P>&nbsp; </P><P>11.&nbsp;&nbsp; 将调用密集型的 COM 组件迁移到托管代码 </P><P>.NET Framework 提供了一个简单的方法与传统的 COM 组件进行交互。其优点是可以在保留现有投资的同时利用新的平台。但是在某些情况下，保留旧组件的性能开销使得将组件迁移到托管代码是值得的。每一情况都是不一样的，决定是否需要迁移组件的最好方法是对 Web 站点运行性能测量。建议您研究一下如何将需要大量调用以进行交互的任何 COM 组件迁移到托管代码。 </P><P>许多情况下不可能将旧式组件迁移到托管代码，特别是在最初迁移 Web 应用程序时。在这种情况下，最大的性能障碍之一是将数据从非托管环境封送到托管环境。因此，在交互操作中，请在任何一端执行尽可能多的任务，然后进行一个大调用而不是一系列小调用。例如，公共语言运行库中的所有字符串都是 Unicode 的，所以应在调用托管代码之前将组件中的所有字符串转换成 Unicode 格式。 </P><P>另外，一处理完任何 COM 对象或本机资源就释放它们。这样，其他请求就能够使用它们，并且最大限度地减少了因稍后请求垃圾回收器释放它们所引起的性能问题。 </P><P>&nbsp; </P><P>12.&nbsp;&nbsp; 在 Visual Basic .NET 或 JScript 代码中使用早期绑定 </P><P>以往，开发人员喜欢使用 Visual Basic、VBScript 和 JScript 的原因之一就是它们所谓“无类型”的性质。变量不需要显式类型声明，并能够简单地通过使用来创建它们。当从一个类型到另一个类型进行分配时，转换将自动执行。不过，这种便利会大大损害应用程序的性能。 </P><P>Visual Basic 现在通过使用 Option Strict 编译器指令来支持类型安全编程。为了向后兼容，默认情况下，ASP.NET 不启用该选项。但是，为了得到最佳性能，强烈建议在页中启用该选项。若要启用 Option Strict，请将 Strict 属性包括在 @ Page 指令中，或者，对于用户控件，请将该属性包括在 @ Control 指令中。下面的示例演示了如何设置该属性，并进行了四个变量调用以显示使用该属性是如何导致编译器错误的。 </P><P>&nbsp; </P><P>&lt;%@ Page Language="VB" Strict="true" %&gt; </P><P>&lt;% </P><P>Dim B </P><P>Dim C As String </P><P>&#39; This will cause a compiler error. </P><P>A = "Hello" </P><P>&#39; This will cause a compiler error. </P><P>B = "World" </P><P>&#39; This will not cause a compiler error. </P><P>C = "!!!!!!" </P><P>&#39; But this will cause a compiler error. </P><P>C = 0 </P><P>%&gt; </P><P>&nbsp; </P><P>JScript .NET 也支持无类型编程，但它不提供强制早期绑定的编译器指令。若发生下面任何一种情况，则变量是晚期绑定的： </P><P>&nbsp; </P><P>被显式声明为 Object。 </P><P>是无类型声明的类的字段。 </P><P>是无显式类型声明的专用函数或方法成员，并且无法从其使用推断出类型。 </P><P>最后一个差别比较复杂，因为如果 JScript .NET 编译器可以根据变量的使用情况推断出类型，它就会进行优化。在下面的示例中，变量 A 是早期绑定的，但变量 B 是晚期绑定的。 </P><P>&nbsp; </P><P>var A; </P><P>var B; </P><P>&nbsp; </P><P>A = "Hello"; </P><P>B = "World"; </P><P>B = 0; </P><P>&nbsp; </P><P>为了获得最佳的性能，当声明 JScript .NET 变量时，请为其分配一个类型。例如，var A : String。 </P><P>&nbsp; </P><P>13.&nbsp;&nbsp; 使请求管线内的所有模块尽可能高效 </P><P>请求管线内的所有模块在每次请求中都有机会被运行。因此，当请求进入和离开模块时快速地触发代码至关重要，特别是在不使用模块功能的代码路径里。分别在使用及不使用模块和配置文件时执行吞吐量测试，对确定这些方法的执行速度非常有用。 </P><P>&nbsp; </P><P>14.&nbsp;&nbsp; 使用 HttpServerUtility.Transfer 方法在同一应用程序的页面间重定向 </P><P>采用 Server.Transfer 语法，在页面中使用该方法可避免不必要的客户端重定向。 </P><P>&nbsp; </P><P>15.&nbsp;&nbsp; 必要时调整应用程序每个辅助进程的线程数 </P><P>ASP.NET 的请求结构试图在执行请求的线程数和可用资源之间达到一种平衡。已知一个使用足够 CPU 功率的应用程序，该结构将根据可用于请求的 CPU 功率，来决定允许同时执行的请求数。这项技术称作线程门控。但是在某些条件下，线程门控算法不是很有效。通过使用与 ASP.NET Applications 性能对象关联的 Pipeline Instance Count 性能计数器，可以在 PerfMon 中监视线程门控。 </P><P>&nbsp; </P><P>当页面调用外部资源，如数据库访问或 XML Web services 请求时，页面请求通常停止并释放 CPU。如果某个请求正在等待被处理，并且线程池中有一个线程是自由的，那么这个正在等待的请求将开始被处理。遗憾的是，有时这可能导致 Web 服务器上存在大量同时处理的请求和许多正在等待的线程，而它们对服务器性能有不利影响。通常，如果门控因子是外部资源的响应时间，则让过多请求等待资源，对 Web 服务器的吞吐量并无帮助。 </P><P>&nbsp; </P><P>为缓和这种情况，可以通过更改 Machine.config 配置文件 &lt;processModel&gt; 节点的 maxWorkerThreads 和 maxIOThreads 属性，手动设置进程中的线程数限制。 </P><P>&nbsp; </P><P>注意 辅助线程是用来处理 ASP.NET 请求的，而 IO 线程则是用于为来自文件、数据库或 XML Web services 的数据提供服务的。 </P><P>&nbsp; </P><P>分配给这些属性的值是进程中每个 CPU 每类线程的最大数目。对于双处理器计算机，最大数是设置值的两倍。对于四处理器计算机，最大值是设置值的四倍。无论如何，对于有四个或八个 CPU 的计算机，最好更改默认值。对于有一个或两个处理器的计算机，默认值就可以，但对于有更多处理器的计算机的性能，进程中有一百或两百个线程则弊大于利。 </P><P>&nbsp; </P><P>注意 进程中有太多线程往往会降低服务器的速度，因为额外的上下文交换导致操作系统将 CPU 周期花在维护线程而不是处理请求上。 </P><P>&nbsp; </P><P>16.&nbsp;&nbsp; 适当地使用公共语言运行库的垃圾回收器和自动内存管理 </P><P>小心不要给每个请求分配过多内存，因为这样垃圾回收器将必须更频繁地进行更多的工作。另外，不要让不必要的指针指向对象，因为它们将使对象保持活动状态，并且应尽量避免含 Finalize 方法的对象，因为它们在后面会导致更多的工作。特别是在 Finalize 调用中永远不要释放资源，因为资源在被垃圾回收器回收之前可能一直消耗着内存。最后这个问题经常会对 Web 服务器环境的性能造成毁灭性的打击，因为在等待 Finalize 运行时，很容易耗尽某个特定的资源。 </P><P>&nbsp; </P><P>17.&nbsp;&nbsp; 如果有大型 Web 应用程序，可考虑执行预批编译 </P><P>每当发生对目录的第一次请求时都会执行批编译。如果目录中的页面没有被分析并编译，此功能会成批分析并编译目录中的所有页面，以便更好地利用磁盘和内存。如果这需要很长时间，则将快速分析并编译单个页面，以便请求能被处理。此功能带给 ASP.NET 性能上的好处，因为它将许多页面编译为单个程序集。从已加载的程序集访问一页比每页加载新的程序集要快。 </P><P>&nbsp; </P><P>批编译的缺点在于：如果服务器接收到许多对尚未编译的页面的请求，那么当 Web 服务器分析并编译它们时，性能可能较差。为解决这个问题，可以执行预批编译。为此，只需在应用程序激活之前向它请求一个页面，无论哪页均可。然后，当用户首次访问您的站点时，页面及其程序集将已被编译。 </P><P>&nbsp; </P><P>没有简单的机制可以知道批编译何时发生。需一直等到 CPU 空闲或者没有更多的编译器进程（例如 csc.exe（C# 编译器）或 vbc.exe（Visual Basic 编译器））启动。 </P><P>&nbsp; </P><P>还应尽量避免更改应用程序的 &#92;bin 目录中的程序集。更改页面会导致重新分析和编译该页，而替换 &#92;bin 目录中的程序集则会导致完全重新批编译该目录。 </P><P>&nbsp; </P><P>在包含许多页面的大规模站点上，更好的办法可能是根据计划替换页面或程序集的频繁程度来设计不同的目录结构。不常更改的页面可以存储在同一目录中并在特定的时间进行预批编译。经常更改的页面应在它们自己的目录中（每个目录最多几百页）以便快速编译。 </P><P>&nbsp; </P><P>Web 应用程序可以包含许多子目录。批编译发生在目录级，而不是应用程序级。 </P><P>&nbsp; </P><P>18.&nbsp;&nbsp; 不要依赖代码中的异常 </P><P>因为异常大大地降低性能，所以您不应该将它们用作控制正常程序流程的方式。如果有可能检测到代码中可能导致异常的状态，请执行这种操作。不要在处理该状态之前捕获异常本身。常见的方案包括：检查 null，分配给将分析为数字值的 String 一个值，或在应用数学运算前检查特定值。下面的示例演示可能导致异常的代码以及测试是否存在某种状态的代码。两者产生相同的结果。 </P><P>&nbsp; </P><P>try </P><P>{ </P><P>&nbsp;result = 100 / num; </P><P>} </P><P>catch (Exception e) </P><P>{ </P><P>&nbsp;result = 0; </P><P>} </P><P>// ...to this. </P><P>if (num != 0) </P><P>&nbsp;result = 100 / num; </P><P>else </P><P>&nbsp;result = 0; </P><P>&nbsp; </P><P>&nbsp; </P><P>19.&nbsp;&nbsp; 使用 HttpResponse.Write 方法进行字符串串联 </P><P>该方法提供非常有效的缓冲和连接服务。但是，如果您正在执行广泛的连接，请使用多个 Response.Write 调用。下面示例中显示的技术比用对 Response.Write 方法的单个调用连接字符串更快。 </P><P>&nbsp; </P><P>Response.Write("a"); </P><P>Response.Write(myString); </P><P>Response.Write("b"); </P><P>Response.Write(myObj.ToString()); </P><P>Response.Write("c"); </P><P>Response.Write(myString2); </P><P>Response.Write("d"); </P><P>&nbsp; </P><P>20.&nbsp;&nbsp; 除非有特殊的原因要关闭缓冲，否则使其保持打开 </P><P>禁用 Web 窗体页的缓冲会导致大量的性能开销。 </P><P>&nbsp; </P><P>21.&nbsp;&nbsp; 只在必要时保存服务器控件视图状态 </P><P>自动视图状态管理是服务器控件的功能，该功能使服务器控件可以在往返过程上重新填充它们的属性值（您不需要编写任何代码）。但是，因为服务器控件的视图状态在隐藏的窗体字段中往返于服务器，所以该功能确实会对性能产生影响。您应该知道在哪些情况下视图状态会有所帮助，在哪些情况下它影响页的性能。例如，如果您将服务器控件绑定到每个往返过程上的数据，则将用从数据绑定操作获得的新值替换保存的视图状态。在这种情况下，禁用视图状态可以节省处理时间。 </P><P>默认情况下，为所有服务器控件启用视图状态。若要禁用视图状态，请将控件的EnableViewState 属性设置为 false，如下面的 DataGrid 服务器控件示例所示。 </P><P>&nbsp; </P><P>&lt;asp:datagrid EnableViewState="false" datasource="..." runat="server"/&gt; </P><P>&nbsp; </P><P>您还可以使用 @ Page 指令禁用整个页的视图状态。当您不从页回发到服务器时，这将十分有用： </P><P>&nbsp; </P><P>&lt;%@ Page EnableViewState="false" %&gt; </P><P>&nbsp; </P><P>注意 @ Control 指令中也支持 EnableViewState 属性，该指令允许您控制是否为用户控件启用视图状态。 </P><P>&nbsp; </P><P>若要分析页上服务器控件使用的视图状态的数量，请（通过将 trace="true" 属性包括在 @ Page 指令中）启用该页的跟踪并查看 Control Hierarchy 表的 Viewstate 列。有关跟踪和如何启用它的信息，请参见 ASP.NET 跟踪。 </P><P>&nbsp; </P><P>22.&nbsp;&nbsp; 避免到服务器的不必要的往返过程 </P><P>虽然您很可能希望尽量多地使用 Web 窗体页框架的那些节省时间和代码的功能，但在某些情况下却不宜使用 ASP.NET 服务器控件和回发事件处理。 </P><P>通常，只有在检索或存储数据时，您才需要启动到服务器的往返过程。多数数据操作可在这些往返过程间的客户端上进行。例如，从 HTML 窗体验证用户输入经常可在数据提交到服务器之前在客户端进行。通常，如果不需要将信息传递到服务器以将其存储在数据库中，那么您不应该编写导致往返过程的代码。 </P><P>如果您开发自定义服务器控件，请考虑让它们为支持 ECMAScript 的浏览器呈现客户端代码。通过以这种方式使用服务器控件，您可以显著地减少信息被不必要的发送到 Web 服务器的次数。 </P><P>&nbsp; </P><P>使用 Page.IsPostBack 避免对往返过程执行不必要的处理 </P><P>&nbsp; </P><P>如果您编写处理服务器控件回发处理的代码，有时可能需要在首次请求页时执行其他代码，而不是当用户发送包含在该页中的 HTML 窗体时执行的代码。根据该页是否是响应服务器控件事件生成的，使用 Page.IsPostBack 属性有条件地执行代码。例如，下面的代码演示如何创建数据库连接和命令，该命令在首次请求该页时将数据绑定到 DataGrid 服务器控件。 </P><P>&nbsp; </P><P>void Page_Load(Object sender, EventArgs e) </P><P>{ </P><P>&nbsp;// Set up a connection and command here. </P><P>&nbsp;if (!Page.IsPostBack) </P><P>&nbsp;{ </P><P>&nbsp;&nbsp;String query = "select * from Authors where FirstName like &#39;%JUSTIN%&#39;"; </P><P>&nbsp;&nbsp;myCommand.Fill(ds, "Authors"); </P><P>&nbsp;&nbsp;myDataGrid.DataBind(); </P><P>&nbsp;} </P><P>} </P><P>&nbsp; </P><P>由于每次请求时都执行 Page_Load 事件，上述代码检查 IsPostBack 属性是否设置为 false。如果是，则执行代码。如果该属性设置为 true，则不执行代码。 </P><P>&nbsp; </P><P>注意 如果不运行这种检查，回发页的行为将不更改。Page_Load 事件的代码在执行服务器控件事件之前执行，但只有服务器控件事件的结果才可能在输出页上呈现。如果不运行该检查，仍将为 Page_Load 事件和该页上的任何服务器控件事件执行处理。 </P><P>&nbsp; </P><P>23.&nbsp;&nbsp; 当不使用会话状态时禁用它 </P><P>并不是所有的应用程序或页都需要针对于具体用户的会话状态，您应该对任何不需要会话状态的应用程序或页禁用会话状态。 </P><P>&nbsp; </P><P>若要禁用页的会话状态，请将 @ Page 指令中的 EnableSessionState 属性设置为 false。例如，&lt;%@ Page EnableSessionState="false" %&gt;。 </P><P>&nbsp; </P><P>注意 如果页需要访问会话变量，但不打算创建或修改它们，则将 @ Page 指令中的 EnableSessionState 属性设置为 ReadOnly。 </P><P>还可以禁用 XML Web services 方法的会话状态。有关更多信息，请参见使用 ASP.NET 和 XML Web services 客户端创建的 XML Web services。 </P><P>&nbsp; </P><P>若要禁用应用程序的会话状态，请在应用程序 Web.config 文件的 sessionstate 配置节中将 mode 属性设置为 off。例如，&lt;sessionstate mode="off" /&gt;。 </P><P>&nbsp; </P><P>24.&nbsp;&nbsp; 仔细选择会话状态提供程序 </P><P>ASP.NET 为存储应用程序的会话数据提供了三种不同的方法：进程内会话状态、作为 Windows 服务的进程外会话状态和 SQL Server 数据库中的进程外会话状态。每种方法都有自己的优点，但进程内会话状态是迄今为止速度最快的解决方案。如果只在会话状态中存储少量易失数据，则建议您使用进程内提供程序。进程外解决方案主要用于跨多个处理器或多个计算机缩放应用程序，或者用于服务器或进程重新启动时不能丢失数据的情况。有关更多信息，请参见 ASP.NET 状态管理。 </P><P>&nbsp; </P><P>25.&nbsp;&nbsp; 不使用不必要的Server Control </P><P>ASP.net中，大量的服务器端控件方便了程序开发，但也可能带来性能的损失，因为用户每操作一次服务器端控件，就产生一次与服务器端的往返过程。因此，非必要，应当少使用Server Control。 </P><P>&nbsp; </P><P>26.&nbsp;&nbsp; ASP.NET应用程序性能测试 </P><P>　　在对ASP.NET应用程序进行性能测试之前，应确保应用程序没有错误，而且功能正确。具体的性能测试可以采用以下工具进行： </P><P>Web Application Strees Tool (WAS)是Microsoft发布的一个免费测试工具，可以从<A target=_blank href="http://webtool.rte.microsoft.com/">http://webtool.rte.microsoft.com/</A>上下载。它可以模拟成百上千个用户同时对web应用程序进行访问请求，在服务器上形成流量负载，从而达到测试的目的，可以生成平均TTFB、平均TTLB等性能汇总报告。 </P><P>&nbsp; </P><P>　　Application Center Test (ACT) 是一个测试工具，附带于Visual Studio.NET的企业版中，是Microsoft正式支持的web应用程序测试工具。它能够直观地生成图表结果，功能比WAS多，但不具备多个客户机同时测试的能力。 </P><P>&nbsp; <BR>提高asp.net应用程序性能的常说的神话 <BR>　　有用的提高asp.net应用程序性能的技巧 <BR>　　ASP.NETt应用程序操作数据库的建议 <BR>　　ASP.NET中的缓存与后台处理进程 </P><P>　　现在写一个asp.net的web应用程序变得非常的简单,许多的程序员都不愿花时间去构建一个性能良好的应用程序。本文将要讨论提高web应用程序性能的十大方法。我将不限于只讨论asp.net应用程序的内容，因为它们只是web应用程序的一个子集。本文也不能提供一个完整提高web应用程序性能的指南，因为这需要一本书的篇幅。本文只提供一个提高web应用程序性能的良好的开端。（剩下的只有我们自己慢慢研究了）。 </P><P>　　在工作这外，我经常去攀岩，在每次攀岩之前，我都会重温一下攀岩线路图及看一下前面的成功的攀岩者的建议。因为我们需要它们的成功经验。同样的，当你需要修改某个有性能问题的程序或者是要开发一个高性能的站点时，你也需要学习怎么样写一个高性能的web应用程序。 </P><P>　　我个人的经验主要来源于在微软的ASP.NET组担任程序经理，运行和管理<A target=_blank href="http://www.asp.net">www.asp.net</A>网站，和协助开发Community Server（它是ASP.NET Forums，.Text, 和 nGallery的集成升级版本软件）。我想这些经验能我让来帮助大家。 </P><P>　　你也许会想到把你的应用程序划分成不同的逻辑层。你也可能听过三层物理架构或N层架构，这是最常用的架构模式，它把不同的程序功能物理的分配给各个硬件来执行。这样，如果我们想提高应用程序的性能的话，加一些硬件就可以达到目的了。按理说这种方法能提高应用程序的性能,但是我们应该避免使用这种方法。所以，只要有可能，我们都应该把ASP.NET页面和它用到的组件放到一个应用程序中运行。 </P><P>　　因为分布式的布署，要用到Web Services或者Remoting，它将使应用程序的性能下降20%或者更多。 </P><P>　　对于数据层有点不同，最好还是把它独立出来布署，用一个单独的硬件来运行它。虽然这样，但是数据库仍然是应用程序性能的瓶颈。因此，当你想优化你的程序的时候，首先想到的地方就应该是优化数据层了。 </P><P>　　在修改应用程序的出现性能问题的地方之前，你要先确认出问题的地方的程序看起来很严密，性能分析器对于查找应用程序哪些地方花费了多长时间非常有用。这些地方是我们用直觉感觉不到的。 </P><P>　　本文讨论两种类型的性能优化：一种是大的性能优化(big optimizations)，如用ASP.NET的Cache；另一种是小的性能优化（tiny optimizations）。小幅的性能优化有时候非常有用。你只对你的代码作一个小的改到，然后一次调用它一千或一万次。作一次大的性能优化，你会发生你的应用程序的速度会有一个很大的提升。作一次小的性能优化，也许每次请求只能提高一微秒，但是如果每天的请求量很大的话，那么应用程序就有很显著的性能提升。 </P><P>　　数据层的性能 </P><P>　　当你要优化一个应用程序的性能的时候，你可以按下面的顺序工作：你的代码要访问数据库？如果要，访问数据库频率怎么样？同样，这种测试方法也可以用在用Web Service或.NET Remoting的程序代码中。本文将不讨论用Web Services和Remoting的程序优化的问题。 </P><P>　　如果在你的代码中有一段必须访问数据库的请求，而你在其它的地方又看到实现同样的功能 的代码，那么你首先要优化它。修改和完善继续测试，除非你有一个非常大的性能问题，你的时间最好花在优化查询，连接数据库，返回数据集的大小，以及一次查询往返回的时间上。 </P><P>根据经验的总结，让我们来看看十个能帮助你提升你的应用程序性能的经验，我将按将它们提升效率的多少从大到小小依次说明。 </P><P>　　一、返回多个数据集 <BR>　　检查你的访问数据库的代码，看是否存在着要返回多次的请求。每次往返降低了你的应用程序的每秒能够响应请求的次数。通过在单个数据库请求中返回多个结果集，可以减少与数据库通信的时间，使你的系统具有扩展性，也可以减少数据库服务器响应请求的工作量。 </P><P>　　如果你是用动态的SQL语句来返回多个数据集，那我建议你用存储过程来替代动态的SQL语句。是否把业务逻辑写到存储过程中，这个有点争议。但是我认为，把业务逻辑写到存储过程里面可以限制返回结果集的大小，减小网络数据的流量，在逻辑层也不用在过滤数据，这是一个好事情。 </P><P>　　用SqlCommand对象的ExecuteReader方法返回一个强类型的业务对象，再调用NextResult方法来移动数据集指针来定位数据集。示例一演示了一个返回多个ArrayList强类型对象的例子。只从数据库中返回你需要的数据可以大大的减小你的服务器所耗用的内存。 </P><P>　　二、对数据进行分页 <BR>　　ASP.NET的DataGrid有一个非常有用的功能：分页。如果DataGrid允许分页，在某一时刻它只下载某一页的数据，另外，它有一个数据分页的浏览导航栏，它让你可以选择浏览某一页，而且每次只下载一页的数据。 </P><P>　　但是它有一个小小的缺点，就是你必须把所有的数据都绑定到DataGrid中。也就是说，你的数据层必须返回所有的数据，然后DataGrid再根据当前页过滤出当前页所需要的数据显示出来。如果有一个一万条记录的结果集要用DataGrid进行分页，假设DataGrid每页只显示25条数据，那就意味着每次请求都有9975条数据都是要丢弃的。每次请求都要返回这么大的数据集，对应用程序的性能影响是非常大的。 </P><P>　　一个好的解决方案是写一个分页的存储过程，例子2是一个用于对Northwind数据库orders表的分页存储过程。你只需要传当前页码，每页显示的条数两个参数进来，存储过程会返回相应的结果。 </P><P>　　在服务器端，我专门写了一个分页的控件来处理数据的分页，在这里，我用了第一个方法，在一个存储过程里面返回了两个结果集：数据记录总数和要求的结果集。 </P><P>　　返回的记录总数取决于要执行查询，例如，一个where条件可以限制返回的结果集的大小。因为在分页界面中必须要根据数据集记录的大小来计算总的页数，所以必须要返回结果集的记录数。例如，如果一共有1000000条记录，如果用where条件就可以过滤成只返回1000条记录，存储过程的分页逻辑应该知道返回那些需要显示的数据。 </P><P>　　三、连接池 <BR>　　用TCP来连接你的应用程序与数据库是一件昂贵的事情（很费时的事情），微软的开发者可以通过用连接池来反复的使用数据库的连接。比起每次请求都用TCP来连一次数据库，连接池只有在不存在有效的连接时才新建一个TCP连接。当关闭一个连接的时候，它会被放到池中，它仍然会保持与数据库的连接，这样就可以减少与数据库的TCP连接次数。 </P><P>　　当然，你要注意那些忘记关的连接，你应在每次用完连接后马上关闭它。我要强调的是：无论什么人说.NET Framework中的GC(垃圾收集器)总会在你用完连接对象后调用连接对象的Close或者Dispose方法显式的关闭你的连接。不要期望CLR会在你想象的时间内关掉连接，虽然CLR最终都要销毁对象和关闭边接，但是我们并不能确定它到底会在什么时候做这些事情。 </P><P>　　要用连接池优化，有两条规则，第一，打开连接，处理数据，然后关闭连接。如果你必须在每次请求中多次打开或关闭连接，这好过一直打开一个边接，然后把它传到各个方法中。第二，用相同的连接字符串（或者用相同的用户标识，当你用集成认证的时候）。如果你没有用相同的连接字符串，如你用基于登录用户的连接字符串，这将不能利用连接池的优化功能。如果你用的是集成的论证，因为用户很多，所以你也不能充分利用连接池的优化功能。.NET CLR提供了一个数据性能计数器，它在我们需要跟踪程序性能特性的时候非常有用，当然也包括连接池的跟踪了。 </P><P>　　无论你的应用程序什么时候要连在另一台机子的资源，如数据库，你都应该重点优化你连资源所花的时间，接收和发送数据的时间，以及往返回之间的次数。优化你的应用程序中的每一个处理点（process hop），它是提高你的应用的性能的出发点。 </P><P>应用程序层包含与数据层连接，传送数据到相应的类的实例以及业务处理的逻辑。例如，在Community Server中，要组装一个Forums或者Threads集合，然后应用业务逻辑，如授权，更重要的，这里要完成缓存逻辑。 </P><P>　　四、 ASP.NET缓存API <BR>　　在写应用程序之前,你要做的第一件事是让应用程序最大化的利用ASP.NET的缓存功能。 </P><P>　　如果你的组件是要在Asp.net应用程序中运行，你只要把System.Web.dll引用到你的项目中就可以了。然后用HttpRuntime.Cache属性就可访问Cache了（也可以通过Page.Cache或HttpContext.Cache访问）。 </P><P>　　有以下几条缓存数据的规则。第一，数据可能会被频繁的被使用，这种数据可以缓存。第二，数据的访问频率非常高，或者一个数据的访问频率不高，但是它的生存周期很长，这样的数据最好也缓存起来。第三是一个常常被忽略的问题，有时候我们缓存了太多数据，通常在一台X86的机子上，如果你要缓存的数据超过800M的话，就会出现内存溢出的错误。所以说缓存是有限的。换名话说，你应该估计缓存集的大小，把缓存集的大小限制在10以内，否则它可能会出问题。在Asp.net中，如果缓存过大的话也会报内存溢出错误，特别是如果缓存大的DataSet对象的时候。 </P><P>　　这里有几个你必须了解的重要的缓存机制。首先是缓存实现了“最近使用”原则（ a least-recently-used algorithm），当缓存少的时候，它会自动的强制清除那些无用的缓存。其次 “条件依赖”强制清除原则（expiration dependencies），条件可以是时间，关键字和文件。以时间作为条件是最常用的。在asp.net2.0中增加一更强的条件，就是数据库条件。当数据库中的数据发生变化时，就会强制清除缓存。要更深入的了解数据库条件依赖请看Dino Esposito 在MSDN杂志2004年七月刊的Cutting Edge专栏文章。 </P><P>　　五、 预请求缓存 <BR>　　在前面，我提到过即使我们只对某些地方作了一个小小的性能改进也可以获得大的性能提升，我非常喜欢用预请求缓存来提升程序的性能。 </P><P>　　虽然Cache API设计成用来保存某段时间的数据，而预请求缓存只是保存某个时期的某个请求的内容。如果某个请求的访问频率高，而且这个请求只需要提取，应用，修改或者更新数据一次。那么就可以预缓存该请求。我们举个例子来说明。 </P><P>　　在CS的论坛应用程序中，每一个页面的服务器控件都要求得到用于决定它的皮肤（skin）的自定义的数据，以决定用哪个样式表及其它的一些个性化的东西。这里面的某些数据可能要长时间的保存，有些时间则不然，如控件的skin数据，它只需要应用一次，而后就可以一直使用。 </P><P>　　要实现预请求缓存，用Asp.net 的HttpContext类，HttpContext类的实例在每一个请求中创建，在请求期间的任何地方都可以通过HttpContext.Current属性访问。HttpContext类有一个Items集合属性，在请求期间所有的对象和数据都被添加到这个集合中缓存起来。和你用Cache缓存访问频率高数据一样，你可以用HttpContext.Items缓存那些每个请求都要用到的基础数据。它背后的逻辑很简单：我们向HttpContext.Items中添加一个数据，然后再从它里面读出数据。 </P><P>　　六、 后台处理 <BR>　　通过上面的方法你的应用程序应该运行得很快了，是不是？但是在某些时候，程序中的一次请求中可能要执行一个非常耗时的任务。如发送邮件或者是检查提交的数据的正确性等。 </P><P>　　当我们把asp.net Forums 1.0集成在CS中的时侯，发现提交一个新的帖子的时候会非常的慢。每次新增一个帖子的时侯，应用程序首先要检查这个帖子是不是重复提的，然后用“badword”过滤器来过滤，检查图片附加码，作帖子的索引，把它添加到合适的队列中，验证它的附件，最后，发邮件到它的订阅者邮件箱中。显然，这个工作量很大。 </P><P>　　结果是它把大量的时间都花在做索引和发送邮件中了。做帖子的索引是一项很耗时的操作，而发邮件给订阅都需要连接到SMTP服务，然后给每一个订阅者都发一封邮件，随着订阅用户的增加，发送邮件的时间会更长。 </P><P>　　索引和发邮件并不需要在每次请求时触发，理想状态下，我们想要批量的处理这些操作，每次只发25封邮件或者每隔5分钟把所有的要发的新邮件发一次。我们决定使用与数据库原型缓存一样的代码，但是失败了，所以又不得不回到VS.NET 2005。 </P><P>　　我们在System.Threading命名空间下找到了Timer类，这个类非常有用，但却很少有人知道，Web开发人员则更少有人知道了。一旦他建了该类的实例，每隔一个指定的时间，Timer类就会从线程池中的一个线程中调用指定的回调函数。这意味着你的asp.net应用程序可以在没有请求的时候也可以运行。这就是后以处理的解决方案。你就可以让做索引和发邮件工作在后台运行，而不是在每次请求的时候必须执行。 </P><P>　　后台运行的技术有两个问题，第一是，当你的应用程序域卸载后，Timer类实例就会停止运行了。也就是不会调用回调方法了。另外，因为CLR的每个进程中都有许多的线程在运行，你将很难让Timer获得一个线程来执行它，或者能执行它，但会延时。Asp.net层要尽量少的使用这种技术，以减少进程中线程的数量，或者只让请求用一小部分的线程。当然如果你有大量的异步工作的话，那就只能用它了。 </P><P>　　这里没有足够的空间有贴代码，你可以从<A target=_blank href="http://www.rob-howard.net/">http://www.rob-howard.net/</A>中下载示例程序，请下载Blackbelt TechEd 2004的示例程序。 </P><P>　　七、 页面输出缓存和代理服务 <BR>　　Asp.net是你的界面层（或者说应该是），它包含页面，用户控件，服务器控件（HttpHandlers 和HttpModules）以及它们生成的内容。如果你有一个Asp.net页面用来输出html，xml,imgae或者是其它的数据，对每一个请求你都用代码来生成相同的输出内容，你就很有必要考虑用页面输出缓存了。 </P><P>　　你只要简单的把下面的这一行代码复制到你的页面中就可以实现了： </P><P>　　 </P><P>　　你就可以有效的利用第一次请求里生成的页面输出缓存内容，60秒后重新生成一道页面内容。这种技术其实也是运用一些低层的Cache API来实现。用页面输出缓存有几个参数可以配置，如上面所说的VaryByParams参数，该参数表示什么时候触发重输出的条件，也可以指定在Http Get或Http Post 请求模式下缓存输出。例如当我们设置该参数为VaryByParams=”Report”的时候，default.aspx?Report=1或者default.aspx?Report=2请求的输出都会被缓存起来。参数的值可以是多个用分号隔开参数。 </P><P>　　许多人都没有意识到当用页面输出缓存的时候，asp.net也会生成HTTP头集（HTTP Header）保存在下游的缓存服务器中，这些信息可以用于Microsoft Internet安全性中以及加速服务器的响应速度。当HTTP缓存的头被重置时，请求的内容会被缓在网络资源中，当客户端再次请求该内容时，就不会再从源服务器上获得内容了，而直接从缓存中获得内容。 </P><P>　　虽然用页面输出缓存不提高你的应用程序性能，但是它能减少了从的服务器中加载已缓存页面内容的次数。当然，这仅限于缓存匿名用户可以访问的页面。因为一旦页面被缓存后，就不能再执行授权操作了。 </P><P>　　八、 用IIS6.0的Kernel Caching <BR>　　如果你的应用程序没用运行在IIS6.0(windows server 2003)中，那么你就失去了一些很好的提高应用程序性能的方法。在第七个方法中，我讲了用页面输出缓存提高应用程序的性能的方法。在IIS5.0中，当一个请求到来到IIS后，IIS会把它转给asp.net，当应用了页面输出缓存时，ASP.NET中的HttpHandler会接到该请求，HttpHandler从缓存中把内容取出来并返回。 </P><P>　　如果你用的是IIS6.0，它有一个非常好的功能就是Kernel Caching，而且你不必修改asp.net程序中任何代码。当asp.net接到一个已缓存的请求，IIS的Kernel Cache会从缓存中得到它的一份拷贝。当从网络中传来一个请求的时，Kernel层会得到该请求，如果该请求被缓存起来了，就直接把缓存的数据返回，这样就完工了。这就意味着当你用IIS的Kernel Caching来缓存页面输出时，你将获得不可置信的性能提升。在开发VS.NET 2005的 asp.net时有一点，我是专门负asp.net性能的程序经理，我的程序员用了这个方法，我看了所有日报表数据，发现用kernel model caching的结果总是最快的。它们的一个共同的特征就是网络的请求和响应量很大,但IIS只占用了5%的CPU资源。这是令人惊奇的。有许多让你使用用IIS6.0的理由，但kernel cashing是最好的一个。 </P><P>　　九、 用Gzip压缩数据 <BR>　　除非你的CPU占用率太高了，才有必要用提升服务器性能的技巧。用gzip压缩数据的方法可以减少你发送到服务端的数据量，也可以提高页面的运行速度，同时也减少了网络的流量。怎么样更好的压缩数据取决于你要发送的数据，还有就是客户端的浏览器支不支持（IIS把用gzip压缩后的数据发送到客户端，客户端要支持gzip才能解析，IE6.0和Firefox都支持）。这样你的服务器每秒能多响应一些请求，同样，你也减少了发送响应的数据量，也就能多发送一些请求了。 </P><P>　　好消息，gzip压缩已经被集成在IIS6.0中了，它比IIS5.0中gzip更好。不幸的是，在IIS6.0中启用gzip压缩，你不能在IIS6.0的属性对话中设置。IIS开发团队把gzip压缩功能开发出来了，但他们却忘了在管理员窗口中让管理员能很方便的启用它。要启用gzip压缩，你只能深入IIS6.0的xml配置文件中修改它的配置。 </P><P>　　除了阅读本文以外，只好再看看Brad Wilson写的《IIS6 压缩》一文（<A target=_blank href="http://www.dotnetdevs.com/articles/IIS6compression.aspx">http://www.dotnetdevs.com/articles/IIS6compression.aspx</A>）；另外还有一篇介绍aspx压缩基础知识的文章，Enable ASPX Compression in IIS。但是要注意，在IIS6中动态压缩和kernel cashing是互斥的。 </P><P>　　十、 服务器控件的ViewState <BR>　　ViewState是asp.net中的一个特性，它用于把生成页面要用的一状态值保存在一个隐藏域中。当页面被回传到服务器时，服务器要解析，校验和应用ViewState中的数据以还原页面的控件树。ViewState是一个非常有用的特性，它能持久化客户端的状态而不用cookie或者服务器的内存。大部分的服务器控件都是用ViewState来持久化那些在页面中与用户交互的元素的状态值。例如，用以保存用于分页的当前页的页码。 </P><P>　　用ViewState会带来一些负面的影响。首先，它加大的服务器的响应和请求的时间。其次，每次回传时都增加了序列化和反序列化数据的时间。最后，它还消耗了服务器更多的内存。 </P><P>　　许多的服务器控件很趋于使用ViewState，如众所周知的DataGrid，而有时候是没有必须使用的。默认情况下是允许使用ViewState的，如果你不想使用ViewState的话，你可以在控件或页面级别把关闭它。在控件中，你只要把EnableViewState属性设为False就可以了；你也可以在页面中设置，使它的范围扩展到整个页面中： </P><P>&nbsp;</P><P>　　如果页面无需回传或者每次请求页面只是呈现控件。你就应该在页面级别中把ViewState关掉。 </P><P>　　总结 <BR>我只是提供我几个我认为有助于提高写高性能的asp.net应用程序的技巧，本文提到的提高asp.net性能的技巧只是一个起步，更多的信息请参考《Improving ASP.NET Performance》一书。只有通过自己的实践，你才能找到对你的项目最有帮助的技巧。然而，在你的开发旅程中，这些技巧可以起一些指导性的作用。在软件开发中，这些都不是绝对有用的，因为各个项目都不一样。 </P><P><BR>　　服务器操作系统"管理工具"中的"性能"计数器，可以对服务器进行监测以了解应用程序性能。</P>]]></description></item><item><title>[Delphi]浅谈ADO中的Filter模糊过滤</title><link>http://www.donlei.com/forum/dispbbs.asp?BoardID=28&amp;ID=1949&amp;Page=1</link><author>果果</author><pubDate>2006-12-08 10:26:23</pubDate><description><![CDATA[<P>Filter中的模糊过滤：</P><P>要实现模糊过滤，BDE中要用“*”，不允许使用“Like”关键字，且只能向后匹配，如“Fcode=’101*’”；而ADO则是使用“%”或“*”都可以，可以使用“Like”关键字，且和SQL语句用法一致，可以任意匹配，如“Fcode like %101%”，但要注意，在字符串前加“%”时，其后面一定也要加“%”，否则会报错，也可以一个“_”，此处有两点不明白：一是为什么会报错，二是下划线是如何匹配的，ado不允许使用not like，不知何故。</P><P>特别注意：ADO在用Filter时，如果要用到“&gt;”号、“&lt;”等时，一定要在比较符与值、字段之间空一格，否则在某些电脑上运行时极有可能会报错，如“Fdate&gt;=date”，这种写法不对，应该为“Fdate &gt;= Date”，NND，不知道是为什么。<BR></P><p>［此帖子已被 果果 在 2006-12-10 0:11:37 编辑过］]]></description></item><item><title>[Delphi]ehlib里的DBGridEh控件如何多选行删除数据</title><link>http://www.donlei.com/forum/dispbbs.asp?BoardID=28&amp;ID=1948&amp;Page=1</link><author>果果</author><pubDate>2006-12-07 11:06:21</pubDate><description><![CDATA[<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align=left><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">GridEH里多选删除记录 use DBGridEhImpExp</SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align=left><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">&nbsp; if QryAcnt.IsEmpty then Exit;</SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align=left><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">&nbsp; if Application.MessageBox(&#39;是否确认要删除当前记录？&#39;,&#39;询问&#39;,MB_YESNO+MB_ICONQUESTION)=ID_NO then Abort;</SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align=left><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">&nbsp;</SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align=left><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">&nbsp; if GridEhAcnt.SelectedRows.Count&lt;=1 then QryAcnt.Delete</SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align=left><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">else DBGridEh_DoDeleteAction(GridEhAcnt,False);</SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align=left><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">&nbsp;</SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align=left><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">&nbsp;</SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align=left><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">很简单吧，就这么几句代码，不用与数据库打交道。<BR></SPAN></P><p>［此帖子已被 果果 在 2006-12-10 0:11:21 编辑过］]]></description></item></channel></rss>
