﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>博客园-VB.NET</title><link>http://www.cnblogs.com/zqonline/</link><description /><language>zh-cn</language><lastBuildDate>Wed, 19 Nov 2008 08:17:53 GMT</lastBuildDate><pubDate>Wed, 19 Nov 2008 08:17:53 GMT</pubDate><ttl>60</ttl><item><title>mysql 连接字符串与SQL不同</title><link>http://www.cnblogs.com/zqonline/archive/2008/11/13/1333010.html</link><dc:creator>zqonline</dc:creator><author>zqonline</author><pubDate>Thu, 13 Nov 2008 09:56:00 GMT</pubDate><guid>http://www.cnblogs.com/zqonline/archive/2008/11/13/1333010.html</guid><wfw:comment>http://www.cnblogs.com/zqonline/comments/1333010.html</wfw:comment><comments>http://www.cnblogs.com/zqonline/archive/2008/11/13/1333010.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/zqonline/comments/commentRss/1333010.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/zqonline/services/trackbacks/1333010.html</trackback:ping><description><![CDATA[<p>以前用SQL Server 连接字符串是用“+”，现在数据库用mysql，写个累加两个字段值SQL语句居然不支持"+"，郁闷了半天在网上查下，才知道mysql里的+是数字相加的操作，连接字符串是CONCAT函数<br>例：<br>mysql&gt; select CONCAT('My', 'S', 'QL');<br>-&gt; 'MySQL' <p>&nbsp; <p>&nbsp; <p><a title="http://www.cnblogs.com/lmjob/archive/2008/03/18/1111978.html" href="http://www.cnblogs.com/lmjob/archive/2008/03/18/1111978.html">http://www.cnblogs.com/lmjob/archive/2008/03/18/1111978.html</a></p> <script type="text/javascript"><!--
google_ad_client = "pub-7518451961016636";
/* 468x60, 创建于 08-10-28 */
google_ad_slot = "7536472503";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script><img src ="http://www.cnblogs.com/zqonline/aggbug/1333010.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/43607/" target="_blank">[新闻]后“开放”平台时代</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>MySql中的事务问题</title><link>http://www.cnblogs.com/zqonline/archive/2008/11/13/1333002.html</link><dc:creator>zqonline</dc:creator><author>zqonline</author><pubDate>Thu, 13 Nov 2008 09:50:00 GMT</pubDate><guid>http://www.cnblogs.com/zqonline/archive/2008/11/13/1333002.html</guid><wfw:comment>http://www.cnblogs.com/zqonline/comments/1333002.html</wfw:comment><comments>http://www.cnblogs.com/zqonline/archive/2008/11/13/1333002.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/zqonline/comments/commentRss/1333002.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/zqonline/services/trackbacks/1333002.html</trackback:ping><description><![CDATA[<p>今天非常开心，因为终于将昨天一个让我很郁闷的问题解决了。事情是这样的，根据业务逻辑的要求，需要对两张数据表进行更新，为了保证数据的完整性，就需要使用transaction的概念了。如以下代码所示：<br>conn.setAutoCommit(false);<br>try <br>{<br>&nbsp;&nbsp;&nbsp; PreparedStatement insertStatement = conn.prepareStatement("INSERT INTO CUSTOM_ORDER(CUSTOMER, ORDER_LIST) VALUES(?, ?)");<br>&nbsp;&nbsp;&nbsp; insertStatement.setString(1, customer);<br>&nbsp;&nbsp;&nbsp; insertStatement.setString(2, orderList);<br>&nbsp;&nbsp;&nbsp; insertStatement.execute();  <p>&nbsp;&nbsp;&nbsp; PreparedStatement updateStatement = conn.prepareStatement("UPDATE PLAYER SET ACCOUNT = ACCOUNT - ? WHERE ID = ?");<br>&nbsp;&nbsp;&nbsp; updateStatement.setInt(1, sumPrice);<br>&nbsp;&nbsp;&nbsp; updateStatement.setString(2, customer);<br>&nbsp;&nbsp;&nbsp; updateStatement.execute(); <br>&nbsp;&nbsp;&nbsp; conn.commit();<br>} <br>catch(SQLException se)<br>{<br>&nbsp;&nbsp;&nbsp; conn.rollback();<br>}<br>finally<br>{<br>&nbsp;&nbsp;&nbsp; conn.close();<br>}  <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 代码很简单，而且根据我以前的经验来看，这样的代码是可以保证数据完整性的，因为对数据表两个连续的更新是一个事务，当发生异常的时候，事务会回滚。然而，测试的结果出乎意料，即使第二个SQL语句执行发生了异常，第一个SQL产生的更新结果也会体现到数据表中。查阅了很多资料，都没有发现这样的代码会有什么问题，而且Java Tutorial对于事务的介绍所给出的例子跟以上代码十分的类似，讲解中也提到两个preparedStatment只有在commit方法被调用的时候，才会作用于数据库。后来我在第一个execute方法之后设置了断点，竟然发现在执行完该方法之后，CUSTOM_ORDER表中已经多了一条记录了。但是此时，我并没有想到这会跟数据库本身有关，拼命在Google上找与JDBC相关的资料。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 最后，在跟一位朋友讨论这个问题的时候，他问我：“你用的什么数据库啊？”我说是MySql，他马上很肯定的告诉我，MySql不支持事务。“不支持事务？！”我立即去查阅了MySql相关的资料[1]，果然，MySql在4.0系列之前确实是没有支持事务的。我的朋友曾在3.x系列版本的MySql下面做了两年的开发，因此才会这样告诉我这样的结论。然而4.x系列是可以支持事务的啊，我用的是4.0.16自然也支持了，为什么还会出现这样的情况呢？<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 原来，MySql的数据表分为两类，一类是传统的数据表，另一类则是支持事务的数据表。支持事务的数据表分为两种：InnoDB和BerkeleyDB。我们可以通过以下的命令确认安装的MySql Server是否支持这两种数据表：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SHOW VARIABLES LIKE 'have_innodb';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SHOW VARIABLES LIKE 'have_bdb';<br>即使MySql Server本身是支持这两种数据表，但是并不代表着创建新表的时候，新表就是属于这两种的。通常，在创建新表的时候，如果没有加以特别的说明，那么创建的新表则是传统的数据表，是不会支持事务的。因此，我的问题也就解决了，因为以上的示例代码操作的是两张没有支持事务的数据表，怎么可能去处理事务呢？<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 通常我们可以通过使用如下的方式来创建支持事务的数据表：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CREATE TABLE TABLE_NAME(FIELD1, FIELD2.... FIELDn) TYPE=INNODB;<br>如果原来建好的数据表，我们也可以通过ALTER TABLE命令直接去改变数据表的类型，而不需要备份数据，然后Drop表，再建立新表，再导入数据这样烦琐的步骤。如：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ALTER TABLE TABLE_NAME TYPE=INNODB; <p>&nbsp; <p><a title="http://www.cnblogs.com/perhaps/archive/2004/09/15/43405.html" href="http://www.cnblogs.com/perhaps/archive/2004/09/15/43405.html">http://www.cnblogs.com/perhaps/archive/2004/09/15/43405.html</a></p>  <script type="text/javascript"><!--
google_ad_client = "pub-7518451961016636";
/* 468x60, 创建于 08-10-28 */
google_ad_slot = "7536472503";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script><img src ="http://www.cnblogs.com/zqonline/aggbug/1333002.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/43607/" target="_blank">[新闻]后“开放”平台时代</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>MySQL 4.1迁移到MySQL 5.0版本的中文乱码问题解决</title><link>http://www.cnblogs.com/zqonline/archive/2008/11/13/1332505.html</link><dc:creator>zqonline</dc:creator><author>zqonline</author><pubDate>Thu, 13 Nov 2008 01:35:00 GMT</pubDate><guid>http://www.cnblogs.com/zqonline/archive/2008/11/13/1332505.html</guid><wfw:comment>http://www.cnblogs.com/zqonline/comments/1332505.html</wfw:comment><comments>http://www.cnblogs.com/zqonline/archive/2008/11/13/1332505.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/zqonline/comments/commentRss/1332505.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/zqonline/services/trackbacks/1332505.html</trackback:ping><description><![CDATA[<p>系统开过过程中，将数据库由MySQL 4.1转化到MySQL 5.0，在升级过程中遇到了中文乱码问题。先描述一下两边的服务器版本和环境。<br>原：Linux，mysql-standard-4.1.8-pc-linux-i686<br>新：Windows Server 2003，MySQL 5.0.45-community<br>本机客户端有两个：<br>MySQL AB\MySQL Connector/ODBC 3.51 = 3.51.22<br>MySQL AB\MySQL Connector/Net 5.0.8.1 = 5.0.8.1  <p>原系统采用默认配置：<br>character_set_server latin1<br>character_set_database latin1<br>character_set_system utf8 <br>character_set_client latin1<br>character_set_connection latin1<br>character_set_results latin1<br>校对字符集为（latin1_swedish_ci是latin1的默认校对）<br>collation_connection latin1_swedish_ci<br>collation_database latin1_swedish_ci<br>collation_server latin1_swedish_ci  <p>character_set_system 元数据字符集  <p>方案一：采用SQLyog等客户端连接MySQL4.1后dump出SQL，再Restore到MySQL 5.0。在执行过程中，发现dump出的SQL中中文数据为乱码。<br>后发现直接在客户端查询MySQL 4.1中文数据也是乱码，检查发现SQLyog连接后默认会执行SET NAMES 'utf8';导致取出的数据不能正常显示。尝试SET NAMES 'latin1'，取出数据还是不能正常显示，但用客户端的导出数据功能时，发现已经是正常的中文，可客户端dump查询结果依旧无法显示中文。  <p>方案二：ssh2上Linux服务器，用命令dump出转化后的utf8数据：<br>mysqldump&nbsp; --default-character-set=latin1 --character-sets-dir=utf8 -umysql -h10.1.47.6 -p ConfigV2Full &gt; new080101.sql<br>将new080101.sql传到本地打开，发现已经是中文，遂将sql导入MySQL 5.0服务器，发现依旧乱码。但利用旧的连接器连接MySQL 5.0发现中文正常，字符集依旧是latin1。  <p>方案三：在方案二的基础上，将new080101.sql另存为有Bom的utf8格式（用UltraEdit处理大文件有优势），再次导入，中文正常。此时字符集为utf8。  <p>过程可谓相当曲折。依旧对MySQL4.1用latin1字符集存中文感到疑惑。于是又去阅读了MySQL 4.1的字符集处理一节，现作一个总结。  <p>总结：  <p>MySQL的使用者大量来自拉丁国家，可能这种字符集导致的乱码问题官方不够重视，也很测试到，简单搜索就会发现MySQL中文乱码问题频频产生。  <p>但这不是MySQL设计者的初衷，MySQL 4.1字符集的设置是非常灵活的，其对于字符集的指定可以细化到一台机器、其中的一个数据库、其中的一张表、其中的一个字段，但是，普通开发者在创建数据库和数据表时，并没有进行那么复杂的配置，而一般使用默认配置。  <p>默认的配置源头来自哪里呢？来自编译。  <p>编译时，通常是Linux默认字符集latin1；<br>安装时，在配置文件中有一个默认字符集，如果不指定，则这个值继承自编译时；<br>启动时，可用命令行参数指定默认字符集，如果不指定，则这个值继承自配置文件；<br>此时character_set_server被设为这个默认字符集；<br>创建数据库时，如果不指定，则这个数据库的字符集被设为character_set_server；<br>选定数据库时，character_set_database被设定为这个数据库字符集；<br>创建一张表时，表的默认字符集被设为character_set_database<br>创建一个字段时，如果不指定，则设为表的默认字符集；<br>这个字符集才数据库中实际存储数据采用的字符集。就是说，如果保持默认，则所有的数据库的所有表的所有字段的都用latin1存储！  <p>当客户端与MySQL建立连接后，发送给MySQL的数据采用的是什么字符集？<br>MySQL 无从得知 (它最多只能猜测)，所以 MySQL 4.1 要求客户端必须指定这个字符集，也就是 character_set_client，MySQL 的怪异之处在于，得到的这个字符集并不立即转换为存储在数据库中的那个字符集，而是先转换为 character_set_connection 变量指定的一个字符集；转换为 character_set_connection 的这个字符集之后，还要转换为数据库默认的字符集，也就是说要经过两次转换；当这个数据被输出时，又要由数据库默认的字符集转换为 character_set_results 指定的字符集。  <p>但服务器上的配置中character_set_client、character_set_connection、character_set_results都是latin1，所以说还是不明白它是如何保存中文的。我估计最大的可能是，它本身把中文当作latin1存入，客户端和连接器负责了把取出的latin1转为可正常显示的中文。  <p>最后不得不说，MySQL将字符集细分的行为给非latin1语系开发者使用带来很大麻烦，MySQL将默认字符集设置为latin1也不够大气也不够智慧。开源是全球的，经济是全球的，世界是平的，以后的软件均使用utf8编码才是化繁就简的王道。  <p>附录：很烦很复杂的MySQL字符集  <p>character_set_server 服务器使用字符集<br>character_set_database 数据库使用字符集<br>character_set_system 系统内部元数据使用字符集，默认是utf8 <br>character_set_client 客户端指定字符集<br>character_set_connection 连接时使用的字符集<br>character_set_results 返回结果的字符集<br>校对字符集的latin1_swedish_ci是latin1的默认值<br>collation_connection latin1_swedish_ci<br>collation_database latin1_swedish_ci<br>collation_server latin1_swedish_ci <p>&nbsp; <p><a title="http://www.cnblogs.com/likun/archive/2008/04/09/1144570.html" href="http://www.cnblogs.com/likun/archive/2008/04/09/1144570.html">http://www.cnblogs.com/likun/archive/2008/04/09/1144570.html</a> <p>&nbsp; <p>&nbsp;</p> <script type="text/javascript"><!--
google_ad_client = "pub-7518451961016636";
/* 468x60, 创建于 08-10-28 */
google_ad_slot = "7536472503";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script><img src ="http://www.cnblogs.com/zqonline/aggbug/1332505.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/43607/" target="_blank">[新闻]后“开放”平台时代</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>Hibernate+mysql 中文问题解决方案.</title><link>http://www.cnblogs.com/zqonline/archive/2008/11/13/1332502.html</link><dc:creator>zqonline</dc:creator><author>zqonline</author><pubDate>Thu, 13 Nov 2008 01:33:00 GMT</pubDate><guid>http://www.cnblogs.com/zqonline/archive/2008/11/13/1332502.html</guid><wfw:comment>http://www.cnblogs.com/zqonline/comments/1332502.html</wfw:comment><comments>http://www.cnblogs.com/zqonline/archive/2008/11/13/1332502.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/zqonline/comments/commentRss/1332502.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/zqonline/services/trackbacks/1332502.html</trackback:ping><description><![CDATA[<p>1, mysql安装时设置字符集utf-8, jdbc驱动3.0.15以上. <br>2. hibernate配置文件中,加上属性 <br>&lt;property name="connection.useUnicode"&gt;true&lt;/property&gt; <br>&lt;property name="connection.characterEncoding"&gt;UTF-8&lt;/property&gt;  <p>3. web.xml设置Filter <br>================================================= <br>&lt;filter&gt; <br>&nbsp; &lt;filter-name&gt; <br>&nbsp;&nbsp; Set Web Application Character Encoding <br>&nbsp; &lt;/filter-name&gt; <br>&nbsp; &lt;filter-class&gt;cn.com.commnet.util.SetEncodeFilter&lt;/filter-class&gt; <br>&nbsp; &lt;init-param&gt; <br>&nbsp;&nbsp; &lt;param-name&gt;defaultencoding&lt;/param-name&gt; <br>&nbsp;&nbsp; &lt;param-value&gt;UTF-8&lt;/param-value&gt; <br>&nbsp; &lt;/init-param&gt; <br>&lt;/filter&gt; <br>&lt;filter-mapping&gt; <br>&nbsp; &lt;filter-name&gt; <br>&nbsp;&nbsp; Set Web Application Character Encoding <br>&nbsp; &lt;/filter-name&gt; <br>&nbsp; &lt;url-pattern&gt;/*&lt;/url-pattern&gt; <br>&lt;/filter-mapping&gt;  <p>============================================= <br>SetEncodeFilter.java <br>public class SetEncodeFilter implements Filter { <br>&nbsp;&nbsp;&nbsp; protected FilterConfig filterConfig = null; <br>&nbsp;&nbsp;&nbsp; protected String defaultEncoding = null; <br>&nbsp;&nbsp;&nbsp; /* (non-Javadoc) <br>&nbsp;&nbsp;&nbsp;&nbsp; * @see javax.servlet.Filter#init(javax.servlet.FilterConfig) <br>&nbsp;&nbsp;&nbsp;&nbsp; */ <br>&nbsp;&nbsp;&nbsp; public void init(FilterConfig arg0) throws ServletException { <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // TODO Auto-generated method stub <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.filterConfig = arg0; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.defaultEncoding = filterConfig.getInitParameter("defaultencoding"); <br>&nbsp;&nbsp;&nbsp; } <br>&nbsp;&nbsp;&nbsp; /* (non-Javadoc) <br>&nbsp;&nbsp;&nbsp;&nbsp; * @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain) <br>&nbsp;&nbsp;&nbsp;&nbsp; */ <br>&nbsp;&nbsp;&nbsp; public void doFilter( <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ServletRequest request, <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ServletResponse response, <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FilterChain chain) <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throws IOException, ServletException { <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // TODO Auto-generated method stub <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; request.setCharacterEncoding(selectEncoding(request)); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; chain.doFilter(request, response); <br>&nbsp;&nbsp;&nbsp; } <br>&nbsp;&nbsp;&nbsp; public void destroy() { <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.defaultEncoding = null; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.filterConfig = null; <br>&nbsp;&nbsp;&nbsp; } <br>&nbsp;&nbsp;&nbsp; protected String selectEncoding(ServletRequest request) { <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return this.defaultEncoding; <br>&nbsp;&nbsp;&nbsp; } <br>}  <p>&nbsp;</p> <p>&nbsp;</p> <p>另需注意的是数据库, 表, 字段的字符集是否也正确! <br>alert database DBNAME character set=utf8  <p>&nbsp;</p> <p><a title="http://www.cnblogs.com/josson/archive/2005/03/16/119619.html" href="http://www.cnblogs.com/josson/archive/2005/03/16/119619.html">http://www.cnblogs.com/josson/archive/2005/03/16/119619.html</a></p> <script type="text/javascript"><!--
google_ad_client = "pub-7518451961016636";
/* 468x60, 创建于 08-10-28 */
google_ad_slot = "7536472503";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>  <script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript">
</script>  <script> window.google_render_ad(); </script> <iframe name="google_ads_frame" marginwidth="0" marginheight="0" src="http://pagead2.googlesyndication.com/pagead/ads?client=ca-pub-7518451961016636&amp;dt=1226539997046&amp;lmt=1226539996&amp;output=html&amp;slotname=7536472503&amp;correlator=1226539997046&amp;url=file%3A%2F%2F%2FC%3A%2FDocuments%2520and%2520Settings%2Fzqonline%2FLocal%2520Settings%2FTemp%2FWindowsLiveWriter-429641856%2F32B974DB68C0%2Findex.htm&amp;ea=0&amp;frm=0&amp;ga_vid=841536015.1226539997&amp;ga_sid=1226539997&amp;ga_hid=1646953374&amp;flash=10.0.12.36&amp;u_h=768&amp;u_w=1024&amp;u_ah=768&amp;u_aw=1024&amp;u_cd=32&amp;u_tz=480&amp;u_java=true&amp;dtd=32" frameborder="0" width="468" scrolling="no" height="60" allowtransparency></iframe><img src ="http://www.cnblogs.com/zqonline/aggbug/1332502.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/43607/" target="_blank">[新闻]后“开放”平台时代</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>.net连接mysql中文乱码问题的解决</title><link>http://www.cnblogs.com/zqonline/archive/2008/11/13/1332498.html</link><dc:creator>zqonline</dc:creator><author>zqonline</author><pubDate>Thu, 13 Nov 2008 01:32:00 GMT</pubDate><guid>http://www.cnblogs.com/zqonline/archive/2008/11/13/1332498.html</guid><wfw:comment>http://www.cnblogs.com/zqonline/comments/1332498.html</wfw:comment><comments>http://www.cnblogs.com/zqonline/archive/2008/11/13/1332498.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/zqonline/comments/commentRss/1332498.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/zqonline/services/trackbacks/1332498.html</trackback:ping><description><![CDATA[<p>这个东西折腾了一晚上。立此存照，希望对遇到同样问题的人有用.<br>我是安装的easyphp自带的MySQL 4.1.9-max ，用mysql connector net 1.07连接<br>解决步骤：<br>1.打开mysql安装目录的my.ini,分别在[client]和[mysqld]中都加入default-character-set= gb2312<br>2.新建你所需要的表。推荐使用EMS 的mysql manager Lite 3，非常好用。新建表的时候，一定要把character set 和Collation分别选择为gb2312和gb2312_chinese_ci<br>ok.到此搞定。当然charset也可以选定为utf-8 <p>&nbsp;</p> <p><a title="http://www.cnblogs.com/tsbob/archive/2006/02/14/330727.html" href="http://www.cnblogs.com/tsbob/archive/2006/02/14/330727.html">http://www.cnblogs.com/tsbob/archive/2006/02/14/330727.html</a></p> <script type="text/javascript"><!--
google_ad_client = "pub-7518451961016636";
/* 468x60, 创建于 08-10-28 */
google_ad_slot = "7536472503";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script><img src ="http://www.cnblogs.com/zqonline/aggbug/1332498.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/43607/" target="_blank">[新闻]后“开放”平台时代</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>mysql 中文支持</title><link>http://www.cnblogs.com/zqonline/archive/2008/11/13/1332496.html</link><dc:creator>zqonline</dc:creator><author>zqonline</author><pubDate>Thu, 13 Nov 2008 01:30:00 GMT</pubDate><guid>http://www.cnblogs.com/zqonline/archive/2008/11/13/1332496.html</guid><wfw:comment>http://www.cnblogs.com/zqonline/comments/1332496.html</wfw:comment><comments>http://www.cnblogs.com/zqonline/archive/2008/11/13/1332496.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/zqonline/comments/commentRss/1332496.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/zqonline/services/trackbacks/1332496.html</trackback:ping><description><![CDATA[<p>修改mysql 目录下的 my.ini <br>把 default-character-set 全部变为gbk  <p>default-character-set=utf8  <p>CREATE TABLE `tablename1` (<br>&nbsp; `aaa` varchar(222) default NULL<br>) ENGINE=InnoDB DEFAULT CHARSET=utf8;  <p>/*数据表 `tablename1` 的数据*/  <p>insert into `tablename1` values  <p>('北大打发打发'),  <p>('北大打发打发'),  <p>('北大打发打发'),  <p>('北大打发打发'),  <p>('北大打发打发'),  <p>('北大打发打发'),  <p>('北大打发打发'),  <p>('北大打发打发'),  <p>('北大打发打发'),  <p>('北大打发打发');  <p>注意在 windows cmd 中 查看是乱码的，因为windows&nbsp; cmd 使用的是 GBK 编码<br>我们也可以把编码都用成 gbk</p> <p> <script type="text/javascript"><!--
google_ad_client = "pub-7518451961016636";
/* 468x60, 创建于 08-10-28 */
google_ad_slot = "7536472503";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>  <script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript">
</script>  <script> window.google_render_ad(); </script> <iframe name="google_ads_frame" marginwidth="0" marginheight="0" src="http://pagead2.googlesyndication.com/pagead/ads?client=ca-pub-7518451961016636&amp;dt=1226539808984&amp;lmt=1226539808&amp;output=html&amp;slotname=7536472503&amp;correlator=1226539808984&amp;url=file%3A%2F%2F%2FC%3A%2FDocuments%2520and%2520Settings%2Fzqonline%2FLocal%2520Settings%2FTemp%2FWindowsLiveWriter-429641856%2F60BA4F367036%2Findex.htm&amp;ea=0&amp;frm=0&amp;ga_vid=1364624856.1226539809&amp;ga_sid=1226539809&amp;ga_hid=573765090&amp;flash=10.0.12.36&amp;u_h=768&amp;u_w=1024&amp;u_ah=768&amp;u_aw=1024&amp;u_cd=32&amp;u_tz=480&amp;u_java=true&amp;dtd=234" frameborder="0" width="468" scrolling="no" height="60" allowtransparency></iframe></p> <p><a title="http://www.cnblogs.com/gwazy/archive/2008/04/10/1146766.html" href="http://www.cnblogs.com/gwazy/archive/2008/04/10/1146766.html">http://www.cnblogs.com/gwazy/archive/2008/04/10/1146766.html</a></p><img src ="http://www.cnblogs.com/zqonline/aggbug/1332496.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/43607/" target="_blank">[新闻]后“开放”平台时代</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>NET访问MySQl数据库中文乱码解决</title><link>http://www.cnblogs.com/zqonline/archive/2008/11/13/1332492.html</link><dc:creator>zqonline</dc:creator><author>zqonline</author><pubDate>Thu, 13 Nov 2008 01:29:00 GMT</pubDate><guid>http://www.cnblogs.com/zqonline/archive/2008/11/13/1332492.html</guid><wfw:comment>http://www.cnblogs.com/zqonline/comments/1332492.html</wfw:comment><comments>http://www.cnblogs.com/zqonline/archive/2008/11/13/1332492.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/zqonline/comments/commentRss/1332492.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/zqonline/services/trackbacks/1332492.html</trackback:ping><description><![CDATA[<p>一．环境准备：  <p>1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 安装.NET FrameWork1.1  <p>2.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 安装MySQL 4.1.x www.mysql.com  <p>3.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 安装Mysql connector for .Net1.0&nbsp; www.mysql.com  <p>二．问题描述：如题  <p>三．问题分析：  <p>Mysql从4.1以后开始支持多编码。用因为MySQL是瑞典人开发的，所以安装MySQL默然是latin1。而我们中文操作系统环境下用到的默认是GB2312.这样我们不管在查询数据库中文数据时，数据库转换字符时就会出现混乱。  <script type="text/javascript"><!--
google_ad_client = "pub-7518451961016636";
/* 468x60, 创建于 08-10-28 */
google_ad_slot = "7536472503";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script> <p>四．问题解决：  <p>通一数据库表和字段使用GB2312字符集。具体方法：  <p>1)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在创建数据表时，先执行如下语句：  <p>set character_set_results=gb2312;  <p>set character_set_client=gb2312;  <p>set character_set_connection=gb2312;  <p>set character_set_server=gb2312;  <p>2)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 然后再执行建表语句：例如  <p>CREATE TABLE `table1` (  <p> `Code` varchar(10) NOT NULL default '',  <p> `Name` double default '-1',  <p> PRIMARY KEY (`Code`)  <p>) ENGINE=MyISAM DEFAULT CHARSET=gb2312;  <p>这里字符集也设置为gb2312  <p>3)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 建立asp.net工程，修改 web.config文件中的  <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;globalization  <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; requestEncoding="gb2312"  <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; responseEncoding="gb2312"  <p>/&gt;  <p>4)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 修改数据库连接字符串，设置指定的字符集：  <p>“server=yourIP;database=yourDB; User ID=yourID;Password=yourPwd; Charset=gb2312”  <p>5)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 完成。  <p>五．小节  <p>其实如果想得到更好的国际化支持，同一使用UTF-8既可。 <p>&nbsp;</p> <p><a title="http://www.cnblogs.com/HuangLiang/archive/2007/03/21/681570.html" href="http://www.cnblogs.com/HuangLiang/archive/2007/03/21/681570.html">http://www.cnblogs.com/HuangLiang/archive/2007/03/21/681570.html</a></p><img src ="http://www.cnblogs.com/zqonline/aggbug/1332492.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/43607/" target="_blank">[新闻]后“开放”平台时代</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>缩短IIS应用池回收时间,减少IIS假死</title><link>http://www.cnblogs.com/zqonline/archive/2008/11/11/1331149.html</link><dc:creator>zqonline</dc:creator><author>zqonline</author><pubDate>Tue, 11 Nov 2008 02:20:00 GMT</pubDate><guid>http://www.cnblogs.com/zqonline/archive/2008/11/11/1331149.html</guid><wfw:comment>http://www.cnblogs.com/zqonline/comments/1331149.html</wfw:comment><comments>http://www.cnblogs.com/zqonline/archive/2008/11/11/1331149.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/zqonline/comments/commentRss/1331149.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/zqonline/services/trackbacks/1331149.html</trackback:ping><description><![CDATA[<p>转:   <br />IIS假死的原因：    <br />打开IIS 你就会看到应用程序池，默认只有一个应用程序池，查看应用程序池的属性，会发现他的回收时间，默认多达，1740分钟，就是说，需要在1740分钟后才回收此应用程序池，如果在这个时间内，达到请求的最高限制，那么就会出现ASP假死的情况，这个就是大型网站出现假死的情况，反而，小型网站确不会出现这样的情况，因为他请求少，流量少，还没达到限制数量。当然要看你的服务器上网站数目而定。    <br />以下是解决方法:    <br />资料一  <script type="text/javascript"><!--
google_ad_client = "pub-7518451961016636";
/* 468x60, 创建于 08-10-28 */
google_ad_slot = "7536472503";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>    <br />单个网站解决方法:    <br />把应用程序池回收时间缩短到300-600分钟，其间回收过程中，需要占用一点CPU资源，没办法，为了稳定性，再把回收时间设为凌晨5点。    <br />多网站解决方法：    <br />我的服务器目前拉了70个网站左右，我新建六个应用程序池，把每个池回收时间缩小到300分钟，然后再分配每个池10个网站左右(这个分配是要求你的网站访问量所定)如果某个网站，访问量大，就单独给他一个程序池，但是这样做的后果就是需要大内存，一个池现在占用我120M内存左右，反正内存大，没关系，    <br />那么多网站如何分配应用程序池，打开IIS--查看你要分配的网站属性，，查看主目录--在下面你就会看到应用程序池了，分配一个就行了。    <br />资料二    <br />大家在使用iis6时..如果装了动网论坛.肯定有出现过iis6假死现像..就是asp网页打开慢..但是iis却是正常的..静态网页打开速度一样..这时候..我一直是重启的方法..查了官方的资料结果没有...据官方资料说..win2003很快就要打这个补丁了..是iis6对access驱动支持不理像..也算是一个bug吧..由于我的服务器虚拟主机多..而且大多支持asp..如果一旦假死就无法运行..在多方面的资料查找下..找到了一个比较简单的方法..具体我测试是通过了..iis6自带数据应用程序池..现在就利用他来解决假死..     <br />首先把bbs设一个单独的目录..然后点击应用程序池..新建应用程序池.输入应用程序池id..     <br />然后把bbs的虚拟目录下面的.就用程序池..选择刚才新建的应用程序池...     <br />然后再回到刚才设好的应用程序池...点击..属性...把回收工作进程数(分钟)及回收工作进程数还有在下列时间回收时间进程勾上..然后在下列时间回收程序池里左边添加..选择一个时间..一般来说..网站到凌晨3点的时候.基本人都很少了..这时回收一下bbs的进程数..就可以解决了iis假死的现像..     <br />当然还可以配置其他信息..比如说iis6的用户名.. 我们可以打开计处机管理..然后打开计算机用户管理..添加一个用户..设置好后..在应用程序池里面..标识..把添加的用户放上去..用用户来测试回收的进程..当然还有..其他配置..其实很简单..只要你好好看一下..就能明白意思...     <br />对于我来说..这种方法可能不太方便..所以我用一个工具来回收应用程序池..这样方便而且快捷..个人用户当然不需要这种工具..我是公司工作..服务器压力挺大..所以都用工具来解决一些问题.所括.iis的备分.及虚拟主机ip的统一修改及端口访问的ip记录..用批处理是一个很简单又方便的方法.所以.把一台服务器做的安全..并不是哪么容易的事..特别是iis..经常去官方网站搜索资料是一个好习惯..还有就是经常性的访问日志..及注册表的用户还有加载运行的程序.及服务也是一个好方法..所以.要学会如何遇到问题如何处理问题!!!!</p>  <p></p> <script type="text/javascript"><!--
google_ad_client = "pub-7518451961016636";
/* 468x60, 创建于 08-10-28 */
google_ad_slot = "7536472503";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script><img src ="http://www.cnblogs.com/zqonline/aggbug/1331149.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/43606/" target="_blank">[新闻]李彦宏首次表态竞价排名问题:有错能改善莫大焉</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>使用VB.Net写一个简单的数据访问层：T-Sql函数的支持。</title><link>http://www.cnblogs.com/zqonline/archive/2008/10/30/1322896.html</link><dc:creator>zqonline</dc:creator><author>zqonline</author><pubDate>Thu, 30 Oct 2008 04:46:00 GMT</pubDate><guid>http://www.cnblogs.com/zqonline/archive/2008/10/30/1322896.html</guid><wfw:comment>http://www.cnblogs.com/zqonline/comments/1322896.html</wfw:comment><comments>http://www.cnblogs.com/zqonline/archive/2008/10/30/1322896.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cnblogs.com/zqonline/comments/commentRss/1322896.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/zqonline/services/trackbacks/1322896.html</trackback:ping><description><![CDATA[<p>为了支持不同的数据源，数据访问层，就不能简单的创建不同的Command,Conection,DataAdapter对象。根据不同的数据源进行不同的t-sql语句转换，下面我们就来看看数据层对函数的支持。</p>
<p>
<script type="text/javascript"><!--
google_ad_client = "pub-7518451961016636";
/* 468x60, 创建于 08-10-19 */
google_ad_slot = "7558631882";
google_ad_width = 468;
google_ad_height = 60;
// --></script>
<script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"></script>
</p>
<p>Abs</p>
<blockquote>
<pre class="csharpcode"><span class="kwrd">Dim</span> o <span class="kwrd">As</span> <span class="kwrd">New</span> Common.主表_Operate
<span class="kwrd">Dim</span> item <span class="kwrd">As</span> <span class="kwrd">New</span> Common.主表
<span class="kwrd">Dim</span> command <span class="kwrd">As</span> ICommand = <span style="color: #ff0000;">o.SQL.Saclar(item._库存量.Abs).From(item)</span>
Console.WriteLine(<span class="str">"ABS语句：{0}"</span>, command.CommandText)
<span class="kwrd">Dim</span> value <span class="kwrd">As</span> <span class="kwrd">Object</span> = o.ExecuteScalar(command)
Console.WriteLine(<span class="str">"绝对值：{0}"</span>, value)</pre>
<pre class="csharpcode">红色部份就是对应的Sql语句。获取库存量的绝对值，并返回第一行第一列的值。</pre>
<pre class="csharpcode">&nbsp;</pre>
<!--
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
--></blockquote>
<pre class="csharpcode">AsName,Sum</pre>
<blockquote>
<pre class="csharpcode">Dim o As New Common.主表_Operate
Dim item As New Common.主表
Dim command As ICommand = o.SQL.Saclar(o.SQL.AsName(item._库存金额.Sum, <span class="str">"库存总金额"</span>)).From(item)
Console.WriteLine(<span class="str">"ASName语句：{0}"</span>, command.CommandText)
Dim <span class="kwrd">value</span> As Object = o.ExecuteScalar(command)</pre>
<pre class="csharpcode">对库存金额求和，返回的列名，是库存总金额。</pre>
<!--
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
--></blockquote>
<pre class="csharpcode">Avg</pre>
<blockquote>
<pre class="csharpcode"><span class="kwrd">Dim</span> o <span class="kwrd">As</span> <span class="kwrd">New</span> Common.主表_Operate
<span class="kwrd">Dim</span> item <span class="kwrd">As</span> <span class="kwrd">New</span> Common.主表
<span class="kwrd">Dim</span> command <span class="kwrd">As</span> ICommand = o.SQL.Saclar(item._库存量.Avg).From(item)
Console.WriteLine(<span class="str">"Avg语句：{0}"</span>, command.CommandText)
<span class="kwrd">Dim</span> value <span class="kwrd">As</span> <span class="kwrd">Object</span> = o.ExecuteScalar(command)
Console.WriteLine(<span class="str">"平均值：{0}"</span>, value)</pre>
<pre class="csharpcode">对库存量求平均值</pre>
</blockquote>
<pre class="csharpcode">Bracket，Count</pre>
<blockquote>
<pre class="csharpcode"><span class="kwrd">Dim</span> o <span class="kwrd">As</span> <span class="kwrd">New</span> Common.主表_Operate
<span class="kwrd">Dim</span> item <span class="kwrd">As</span> <span class="kwrd">New</span> Common.主表
<span class="kwrd">Dim</span> command <span class="kwrd">As</span> ICommand = o.SQL.Saclar(item._库存量.Count).From(item). _
    WHERE(o.SQL.Bracket(item._物品型号.EqualTo(<span class="str">"aa"</span>).<span class="kwrd">And</span>(item._物品名称.EqualTo(<span class="str">"bb"</span>)). _
            <span class="kwrd">Or</span>(o.SQL.Bracket(item._生产厂家.EqualTo(<span class="str">"cc"</span>).<span class="kwrd">And</span>(item._单位.EqualTo(<span class="str">"11"</span>))) _
               ) _
          ) _
       )
Console.WriteLine(<span class="str">"Bracket：{0}"</span>, command.CommandText)
<span class="kwrd">Dim</span> value <span class="kwrd">As</span> <span class="kwrd">Object</span> = o.ExecuteScalar(command)
Console.WriteLine(<span class="str">"Bracket：{0}"</span>, value)</pre>
<pre class="csharpcode">这个主要针对条件优先级的调整。相当于sqlserver,access中的括号，上面原始的sql语句是。</pre>
<pre class="csharpcode">select count(库存量) from item where (物品型号='aa' and 物品名称='bb')</pre>
<pre class="csharpcode">or (生产厂家='cc' and 单位='11')</pre>
<pre class="csharpcode">唯一不好的地方，是感觉括号太多了，不知道有没有什么办法。</pre>
</blockquote>
<pre class="csharpcode">Day</pre>
<p>
<script type="text/javascript"><!--
google_ad_client = "pub-7518451961016636";
/* 468x15, 创建于 08-10-22 */
google_ad_slot = "4394388348";
google_ad_width = 468;
google_ad_height = 15;
// --></script>
<script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"></script>
</p>
<blockquote>
<pre class="csharpcode"><span class="kwrd">Dim</span> o <span class="kwrd">As</span> <span class="kwrd">New</span> Common.进仓_Operate
<span class="kwrd">Dim</span> item <span class="kwrd">As</span> <span class="kwrd">New</span> Common.进仓
<span class="kwrd">Dim</span> command <span class="kwrd">As</span> ICommand = o.SQL.Saclar(item._日期.Day).From(item)
Console.WriteLine(<span class="str">"Day：{0}"</span>, command.CommandText)
<span class="kwrd">Dim</span> value <span class="kwrd">As</span> <span class="kwrd">Object</span> = o.ExecuteScalar(command)
Console.WriteLine(<span class="str">"Day：{0}"</span>, value)</pre>
</blockquote>
<pre class="csharpcode">Exists</pre>
<blockquote>
<pre class="csharpcode"><span class="kwrd">Dim</span> o <span class="kwrd">As</span> <span class="kwrd">New</span> Common.主表_Operate
<span class="kwrd">Dim</span> item <span class="kwrd">As</span> <span class="kwrd">New</span> Common.主表
<span class="kwrd">Dim</span> j <span class="kwrd">As</span> <span class="kwrd">New</span> Common.进仓
<span class="kwrd">Dim</span> command <span class="kwrd">As</span> ICommand = o.SQL.Saclar(item._物品型号.Count()).From(item). _
    WHERE(o.SQL.Exists(item._ID.NotEqualTo(j._主表ID), j))
Console.WriteLine(<span class="str">"Exists：{0}"</span>, command.CommandText)
<span class="kwrd">Dim</span> value <span class="kwrd">As</span> <span class="kwrd">Object</span> = o.ExecuteScalar(command)
Console.WriteLine(<span class="str">"Exists：{0}"</span>, value)</pre>
<pre class="csharpcode">针对Exists语句的支持。原始的t-sql语句是:</pre>
<pre class="csharpcode">select count(物品型号) from item </pre>
<pre class="csharpcode">where exists(select 1 from 进仓 where item.id&lt;&gt;进仓.主表id)</pre>
</blockquote>
<pre class="csharpcode">IsNUll</pre>
<blockquote>
<pre class="csharpcode"><span class="kwrd">Dim</span> o <span class="kwrd">As</span> <span class="kwrd">New</span> Common.主表_Operate
<span class="kwrd">Dim</span> item <span class="kwrd">As</span> <span class="kwrd">New</span> Common.主表
<span class="kwrd">Dim</span> pars <span class="kwrd">As</span> <span class="kwrd">New</span> ParameterCollection
pars.Add(o.DataProvider.DataHelper.GetNewPar(<span class="str">"@A"</span>, System.DBNull.Value))
<span class="kwrd">Dim</span> command <span class="kwrd">As</span> ICommand = o.SQL.Saclar(o.SQL.IsNull( _
    <span class="kwrd">New</span> At.Data.CustomExpression(<span class="str">"@A"</span>, pars), <span class="str">"zqonlie"</span>)). _
    From(item). _
    OrderBy(item._物品型号.OrderBy(SortDirection.DESC))
Console.WriteLine(<span class="str">"IsNUll：{0}"</span>, command.CommandText)
<span class="kwrd">Dim</span> value <span class="kwrd">As</span> <span class="kwrd">Object</span> = o.ExecuteScalar(command)
Console.WriteLine(<span class="str">"IsNUll：{0}"</span>, value)</pre>
<!--
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
-->
<pre class="csharpcode">这里根据sqlserver里的isnull(expression,value)函数而来,测试表达式是否为null，如果是则用</pre>
<pre class="csharpcode">指定的值替代。目前已知access里的isnull函数与sqlserver的含义不一样，这里MsAccessSqlBuilder</pre>
<pre class="csharpcode">类重写了，iif(isnull(expression), value,expression),结合iif与isnull完成。</pre>
<pre class="csharpcode">CustomExpression：自定义表达式对象，根据针对数据源编写表达式如：针对sqlserver可以写</pre>
<pre class="csharpcode">case 语句的支持。</pre>
<pre class="csharpcode">OrderBy：是对查询排序的支持</pre>
<pre class="csharpcode">原型t-sql:select isnull(@a,zqonline) from item order by 物品型号 desc</pre>
</blockquote>
<pre class="csharpcode">Left</pre>
<blockquote>
<pre class="csharpcode"><span class="kwrd">Dim</span> o <span class="kwrd">As</span> <span class="kwrd">New</span> Common.主表_Operate
<span class="kwrd">Dim</span> item <span class="kwrd">As</span> <span class="kwrd">New</span> Common.主表
<span class="kwrd">Dim</span> command <span class="kwrd">As</span> ICommand = o.SQL.Saclar(item._物品型号.Left(10)).From(item). _
OrderBy(item._物品型号.OrderBy(SortDirection.DESC))
Console.WriteLine(<span class="str">"Left：{0}"</span>, command.CommandText)
<span class="kwrd">Dim</span> value <span class="kwrd">As</span> <span class="kwrd">Object</span> = o.ExecuteScalar(command)
Console.WriteLine(<span class="str">"Left：{0}"</span>, value)</pre>
</blockquote>
<pre class="csharpcode">Len</pre>
<blockquote>
<pre class="csharpcode"><span class="kwrd">Dim</span> o <span class="kwrd">As</span> <span class="kwrd">New</span> Common.主表_Operate
<span class="kwrd">Dim</span> item <span class="kwrd">As</span> <span class="kwrd">New</span> Common.主表
<span class="kwrd">Dim</span> command <span class="kwrd">As</span> ICommand = o.SQL.Saclar(o.SQL.Len(item._物品型号.Max)).From(item)
Console.WriteLine(<span class="str">"Len：{0}"</span>, command.CommandText)
<span class="kwrd">Dim</span> value <span class="kwrd">As</span> <span class="kwrd">Object</span> = o.ExecuteScalar(command)
Console.WriteLine(<span class="str">"Len：{0}"</span>, value)</pre>
</blockquote>
<pre class="csharpcode">Lower</pre>
<blockquote>
<pre class="csharpcode"><span class="kwrd">Dim</span> o <span class="kwrd">As</span> <span class="kwrd">New</span> Common.主表_Operate
<span class="kwrd">Dim</span> item <span class="kwrd">As</span> <span class="kwrd">New</span> Common.主表
<span class="kwrd">Dim</span> command <span class="kwrd">As</span> ICommand = o.SQL.Saclar(o.SQL.AsName(o.SQL.Lower(item._物品型号.Max), <span class="str">"转换为小写"</span>))</pre>
<pre class="csharpcode">.From(item)
Console.WriteLine(<span class="str">"Lower：{0}"</span>, command.CommandText)
<span class="kwrd">Dim</span> value <span class="kwrd">As</span> <span class="kwrd">Object</span> = o.ExecuteScalar(command)
Console.WriteLine(<span class="str">"Lower：{0}"</span>, value)</pre>
</blockquote>
<pre class="csharpcode">ltrim,max,min,Month,Right,Replace,Round,Rtrim,SubString,Sum,Upper,Year<span style="color: #ff0000;">其中MsAccess不支持</span></pre>
<pre class="csharpcode"><span style="color: #ff0000;">Replace函数</span></pre>
<pre class="csharpcode"><span style="color: #000000;">以上这此函数调用方式都类似。这里就不一一举例了。</span></pre>
<pre class="csharpcode">Not</pre>
<blockquote>
<pre class="csharpcode"><span class="kwrd">Dim</span> o <span class="kwrd">As</span> <span class="kwrd">New</span> Common.主表_Operate
<span class="kwrd">Dim</span> item <span class="kwrd">As</span> <span class="kwrd">New</span> Common.主表
<span class="kwrd">Dim</span> command <span class="kwrd">As</span> ICommand = o.SQL.Saclar(item._物品型号.Left(10)). _
From(item).WHERE(o.SQL.<span class="kwrd">Not</span>(item._物品型号.EqualTo(1))). _
OrderBy(item._物品型号.OrderBy(SortDirection.DESC))
Console.WriteLine(<span class="str">"[Not]：{0}"</span>, command.CommandText)
<span class="kwrd">Dim</span> value <span class="kwrd">As</span> <span class="kwrd">Object</span> = o.ExecuteScalar(command)
Console.WriteLine(<span class="str">"[Not]：{0}"</span>, value)</pre>
<pre class="csharpcode">原型t-sql:select left(物品型号,10) from item where not 物品型号='1' order by 物品型号 desc</pre>
<!--
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
--></blockquote>
<pre class="csharpcode">如果感兴趣，请继续关注。</pre>
<p><!--
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
--><!--
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
--><!--
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
--></p><img src ="http://www.cnblogs.com/zqonline/aggbug/1322896.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/43605/" target="_blank">[新闻]杨致远发表博客解释辞职原因</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>使用VB.Net写一个简单的数据访问层(不能称ORM):CRUD操作</title><link>http://www.cnblogs.com/zqonline/archive/2008/10/28/1321584.html</link><dc:creator>zqonline</dc:creator><author>zqonline</author><pubDate>Tue, 28 Oct 2008 11:13:00 GMT</pubDate><guid>http://www.cnblogs.com/zqonline/archive/2008/10/28/1321584.html</guid><wfw:comment>http://www.cnblogs.com/zqonline/comments/1321584.html</wfw:comment><comments>http://www.cnblogs.com/zqonline/archive/2008/10/28/1321584.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/zqonline/comments/commentRss/1321584.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/zqonline/services/trackbacks/1321584.html</trackback:ping><description><![CDATA[<p><span style="font-size: xx-small;">上一篇，简单的介绍了实体对象的一些方法和属性。接下来看看，CRUD操作。</span></p>
<p><span style="font-size: xx-small;">C：创建</span></p>
<p><span style="font-size: xx-small;">R：获取</span></p>
<p><span style="font-size: xx-small;">U：更新</span></p>
<p><span style="font-size: xx-small;">D：删除</span></p>
<p>&nbsp;</p>
<p>
<script type="text/javascript"><!--
google_ad_client = "pub-7518451961016636";
/* 468x60, 创建于 08-10-19 */
google_ad_slot = "7558631882";
google_ad_width = 468;
google_ad_height = 60;
// --></script>
<script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"></script>
</p>
<p><span style="font-size: xx-small;">首先看C：</span></p>
<pre class="csharpcode"><span style="font-size: xx-small;">    &lt;NUnit.Framework.Test()&gt; _
    <span class="kwrd">Public</span> <span class="kwrd">Sub</span> Insert()
        <span class="kwrd">Dim</span> item <span class="kwrd">As</span> <span class="kwrd">New</span> Common.主表
        item.物品名称 = <span class="str">"test"</span>
        item.物品编号 = System.Guid.NewGuid.ToString
        item.库存量 = 1
        item.库存金额 = 11
        <span class="kwrd">Dim</span> o <span class="kwrd">As</span> <span class="kwrd">New</span> Common.主表_Operate
        <span class="kwrd">If</span> o.Accept(item) = 0 <span class="kwrd">Then</span>
            Assert.Fail(<span class="str">"没有返回插入记录，影响的行数。"</span>)
        <span class="kwrd">End</span> <span class="kwrd">If</span>

        NUnit.Framework.Assert.AreNotEqual(item.ID, 0)
    <span class="kwrd">End</span> Sub</span></pre>
<pre class="csharpcode"><span style="font-size: xx-small;">首先实例化实体，实体赋值，在实例化操作对象。系统也提供通用的操作对象EntityDbOperate。</span></pre>
<pre class="csharpcode"><span style="font-size: xx-small;">在大多数业务情况上，添加，删除，修改都有自己相应的逻辑。</span></pre>
<pre class="csharpcode"></pre>
<pre class="csharpcode"><span style="font-size: xx-small;">看R:</span></pre>
<pre class="csharpcode"><span style="font-size: xx-small;">    &lt;NUnit.Framework.Test()&gt; _
    <span class="kwrd">Public</span> <span class="kwrd">Sub</span> [<span class="kwrd">Select</span>]()
ADD:
        <span class="kwrd">Dim</span> item <span class="kwrd">As</span> <span class="kwrd">New</span> Common.主表
        <span class="kwrd">Dim</span> o <span class="kwrd">As</span> <span class="kwrd">New</span> Common.主表_Operate

        <span class="kwrd">Dim</span> ec <span class="kwrd">As</span> Common.主表_Container = o.GetEntityContainer(<span class="kwrd">Nothing</span>)
        <span class="kwrd">If</span> ec.Count = 0 <span class="kwrd">Then</span>
            <span class="kwrd">Me</span>.Insert()
        <span class="kwrd">End</span> <span class="kwrd">If</span>
        Assert.AreNotEqual(ec.Count, 0)


        Console.WriteLine(<span class="str">"共有 {0} 个对象。"</span>, ec.Count)

    <span class="kwrd">End</span> Sub</span></pre>
<pre class="csharpcode"><span style="font-size: xx-small;">GetEntityContainer方法返回所有的实体对象。由于这里是测试方法，还调用添加对象的方法。</span></pre>
<pre class="csharpcode"><span style="font-size: xx-small;">GetEntityContainer方法的参数是expression，也就是表达式，可以支持自定义命令。</span></pre>
<pre class="csharpcode"><span style="font-size: xx-small;">这里传入Nothing，也就是获取所有的对象，当然这里先获取DataTable在转换成实体的。</span></pre>
<pre class="csharpcode"><span style="font-size: xx-small;">返回的是自定义的集合对象，实现了IList,IBindList等集合方面的接口，可以直接绑到</span></pre>
<pre class="csharpcode"><span style="font-size: xx-small;">DataGrid,UltraGrid等表格控件上。</span></pre>
<pre class="csharpcode"></pre>
<pre class="csharpcode"><span style="font-size: xx-small;">看D：</span></pre>
<pre class="csharpcode"></pre>
<pre class="csharpcode"><span style="font-size: xx-small;">    &lt;NUnit.Framework.Test()&gt; _
    <span class="kwrd">Public</span> <span class="kwrd">Sub</span> Delete()
Del:
        <span class="kwrd">Dim</span> item <span class="kwrd">As</span> Common.主表
        item = <span class="kwrd">New</span> Common.主表
        <span class="kwrd">Dim</span> o <span class="kwrd">As</span> <span class="kwrd">New</span> EntityDbOperate(<span class="kwrd">Me</span>.DbOperate.DataProvider)

        item = o.GetEntity(o.SQL.<span class="kwrd">Select</span>(1, <span class="kwrd">False</span>).From(item).WHERE(<span class="kwrd">Nothing</span>), item)
        <span class="kwrd">If</span> item <span class="kwrd">Is</span> <span class="kwrd">Nothing</span> <span class="kwrd">Then</span>
            <span class="kwrd">Me</span>.Insert()
            <span class="kwrd">GoTo</span> Del
        <span class="kwrd">End</span> <span class="kwrd">If</span>

        <span class="kwrd">Dim</span> o1 <span class="kwrd">As</span> <span class="kwrd">New</span> Common.主表_Operate
        <span class="kwrd">Dim</span> command <span class="kwrd">As</span> ICommand = o1.SQL.Delete(item).From(item).WHERE(item._ID.EqualTo(item.ID))
        Console.WriteLine(command.CommandText)

        Console.WriteLine(<span class="str">"删除前共有 {0} 条记录！"</span>, o.GetCount(<span class="kwrd">Nothing</span>, item))

        <span class="kwrd">If</span> o1.Delete(item) = 0 <span class="kwrd">Then</span>
            Assert.Fail(<span class="str">"删除实体发生错误，没有返回影响的行数。"</span>)
        <span class="kwrd">End</span> <span class="kwrd">If</span>

        Console.WriteLine(<span class="str">"删除后共有 {0} 条记录！"</span>, o.GetCount(<span class="kwrd">Nothing</span>, item))

        NUnit.Framework.Assert.AreEqual(item.State, Core.EntityState.Deleted)

    <span class="kwrd">End</span> Sub</span></pre>
<pre class="csharpcode"><span style="font-size: xx-small;">这里看起代码比较多，这里是先获取一个实体对象</span></pre>
<pre class="csharpcode"><span style="font-size: xx-small;">o.sql(1,false).from(item).where(nothing)，这是我自己定义的sql语句写法，</span></pre>
<pre class="csharpcode"><span style="font-size: xx-small;">翻译成t-sql语句就是：select top 1 * from item</span></pre>
<pre class="csharpcode"><span style="font-size: xx-small;">如果当前还没有记录，就添加一个对象。</span></pre>
<pre class="csharpcode"><span style="font-size: xx-small;"><span class="kwrd">Dim</span> command <span class="kwrd">As</span> ICommand = o1.SQL.Delete(item).From(item).WHERE(item._ID.EqualTo(item.ID))</span></pre>
<pre class="csharpcode"><span style="font-size: xx-small;"> Console.WriteLine(command.CommandText) </span></pre>
<pre class="csharpcode"><span style="font-size: xx-small;">这句话的意思是构建一条删除语句，我这里主要是为了打印出语句才这样写的，产生的t-sql语句是：</span></pre>
<pre class="csharpcode"><span style="font-size: xx-small;">delete from item where item.id=1</span></pre>
<pre class="csharpcode"><span style="font-size: xx-small;">那么实体删除实体的代码呢是:o1.Delete(item)，只有一句代码，当然方法内部也是通过上面这条语句构建的</span></pre>
<pre class="csharpcode"><span style="font-size: xx-small;">删除语句。</span></pre>
<pre class="csharpcode"></pre>
<pre class="csharpcode"><span style="font-size: xx-small;">看U：</span></pre>
<pre class="csharpcode"><span style="font-size: xx-small;">    &lt;NUnit.Framework.Test()&gt; _
    <span class="kwrd">Public</span> <span class="kwrd">Sub</span> Update()
REST:
        <span class="kwrd">Dim</span> o <span class="kwrd">As</span> <span class="kwrd">New</span> Common.主表_Operate

        <span class="kwrd">Dim</span> item <span class="kwrd">As</span> <span class="kwrd">New</span> Common.主表

        <span class="rem">'获取任意一个实体</span>
        item = o.GetEntity(<span class="kwrd">Nothing</span>)
        <span class="kwrd">If</span> item <span class="kwrd">Is</span> <span class="kwrd">Nothing</span> <span class="kwrd">Then</span>
            <span class="rem">'当前表中没有记录，插入一个实体。</span>
            <span class="kwrd">Me</span>.Insert()
            <span class="kwrd">GoTo</span> REST
        <span class="kwrd">End</span> <span class="kwrd">If</span>


    </span><span style="font-size: xx-small;"><span style="color: #ff0000;">    <span class="kwrd">Dim</span> key <span class="kwrd">As</span> <span class="kwrd">String</span> = System.Guid.NewGuid.ToString
        item.物品名称 = key
        <span class="kwrd">If</span> item.State &lt;&gt; EntityState.Modified <span class="kwrd">Then</span>
            Assert.Fail(<span class="str">"实体的状态没有发生变化。"</span>)
        <span class="kwrd">End</span> <span class="kwrd">If</span>

        <span class="kwrd">If</span> item._物品名称.State &lt;&gt; FieldState.Modified <span class="kwrd">Then</span>
            Assert.Fail(<span class="str">"实体字段 模块名称 状态没有置为Modified。"</span>)
        <span class="kwrd">End</span> <span class="kwrd">If</span></span>

        <span class="rem">'提交数据更新</span>
        <span class="kwrd">Dim</span> cmd <span class="kwrd">As</span> ICommand = o.GetUpdateCommand(item)
        <span class="rem">'打印SQL语句</span>
        Console.WriteLine(cmd.CommandText)
        <span class="rem">'获取需要更新的字段列表</span>
        <span class="kwrd">Dim</span> fs <span class="kwrd">As</span> Data.ColumnValueCollection = o.GetUpdateColumns(item)
        <span class="kwrd">For</span> <span class="kwrd">Each</span> c <span class="kwrd">As</span> IColumnValue <span class="kwrd">In</span> fs.ToArray
            Console.WriteLine(c.FieldExpression.Expression(<span class="kwrd">Nothing</span>).ToString)
        <span class="kwrd">Next</span>
        o.Update(item)

        <span class="rem">'判断更新是否成功。</span>
        <span class="rem">'按当前实体的ID进行查找，这里也可以写成</span>
        item = o.GetEntity(item._ID.EqualTo(item.ID))

        Assert.AreEqual(item.物品名称, key, <span class="str">"值没有更新成功"</span>)


    <span class="kwrd">End</span> Sub</span></pre>
<p><!--
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
-->
<script type="text/javascript"><!--
google_ad_client = "pub-7518451961016636";
/* 468x15, 创建于 08-10-22 */
google_ad_slot = "4394388348";
google_ad_width = 468;
google_ad_height = 15;
// --></script>
<script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"></script>
</p>
<pre class="csharpcode"><span style="font-size: xx-small;">     这里也是综合了几个方法的代码，首先看一下红色部份的代码</span></pre>
<pre class="csharpcode"><span style="font-size: xx-small;">     item.State&lt;&gt;EntityState.Modified</span></pre>
<pre class="csharpcode"><span style="font-size: xx-small;">     这句话的作用是判断实体是已发生了更改。</span></pre>
<pre class="csharpcode"><span style="font-size: xx-small;">     item._物品名称.State&lt;&gt;FieldState.Modified</span></pre>
<pre class="csharpcode"><span style="font-size: xx-small;">     这句话的作用是判断实体的字段是否发生了修改。</span></pre>
<pre class="csharpcode"><span style="font-size: xx-small;">    </span></pre>
<blockquote>
<pre class="csharpcode"><span style="font-size: xx-small;"><span class="rem">'提交数据更新</span> </span></pre>
<pre class="csharpcode"><span style="font-size: xx-small;"><span class="kwrd">Dim</span> cmd <span class="kwrd">As</span> ICommand = o.GetUpdateCommand(item) </span></pre>
<pre class="csharpcode"><span class="rem"><span style="font-size: xx-small;">'打印SQL语句</span></span></pre>
<pre class="csharpcode"><span style="font-size: xx-small;"> Console.WriteLine(cmd.CommandText) </span></pre>
<pre class="csharpcode"><span style="font-size: xx-small;"><span class="rem">'获取需要更新的字段列表</span> </span></pre>
<pre class="csharpcode"><span style="font-size: xx-small;"><span class="kwrd">Dim</span> fs <span class="kwrd">As</span> Data.ColumnValueCollection = o.GetUpdateColumns(item) </span></pre>
<pre class="csharpcode"><span style="font-size: xx-small;"><span class="kwrd">For</span> <span class="kwrd">Each</span> c <span class="kwrd">As</span> IColumnValue <span class="kwrd">In</span> fs.ToArray </span></pre>
<pre class="csharpcode"><span style="font-size: xx-small;">Console.WriteLine(c.FieldExpression.Expression(<span class="kwrd">Nothing</span>).ToString) </span></pre>
<pre class="csharpcode"><span style="font-size: xx-small;"><span class="kwrd">Next</span> </span></pre>
<pre class="csharpcode"><span style="font-size: xx-small;">以上这段代码也是，用于测试的，首先获取一个cmd对象，这个Cmd对象是根据传入的实体对象</span></pre>
<pre class="csharpcode"><span style="font-size: xx-small;">构建成的一个UpdateCommand对象，也就是更新语句。</span></pre>
<pre class="csharpcode"><span style="font-size: xx-small;">接着打印出更新语句。</span></pre>
<pre class="csharpcode"><span style="font-size: xx-small;">然后获取传的实体那些字段参于了更新，实体在进行更新时，就会提交已修改的字段，</span></pre>
<pre class="csharpcode"><span style="font-size: xx-small;">没有修改的字段，不会造成在Update语句中。这里是根据实体字段的状态State进行判断的。</span></pre>
<pre class="csharpcode"><span style="font-size: xx-small;">其实真正更新实体的语句是</span></pre>
<pre class="csharpcode"><span style="font-size: xx-small;">o1.Update(item)，以上部门都是在Update方法内部实现的。</span></pre>
<pre class="csharpcode"></pre>
<pre class="csharpcode"><span style="font-size: xx-small;">好了，今天就先到这里了，如果大家有兴趣，请继续关注！</span></pre>
<pre class="csharpcode"><span style="font-size: xx-small;">主博客：<a href="http://zqonline.cnblogs.com">http://zqonline.cnblogs.com</a></span></pre>
</blockquote>
<pre class="csharpcode"></pre>
<p><!--
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
--><!--
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
--><!--
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
--></p><img src ="http://www.cnblogs.com/zqonline/aggbug/1321584.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/43604/" target="_blank">[新闻]微软公布免费安全软件计划</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>使用VB.Net写一个简单的数据访问层(不能称ORM):前言</title><link>http://www.cnblogs.com/zqonline/archive/2008/10/28/1321562.html</link><dc:creator>zqonline</dc:creator><author>zqonline</author><pubDate>Tue, 28 Oct 2008 10:27:00 GMT</pubDate><guid>http://www.cnblogs.com/zqonline/archive/2008/10/28/1321562.html</guid><wfw:comment>http://www.cnblogs.com/zqonline/comments/1321562.html</wfw:comment><comments>http://www.cnblogs.com/zqonline/archive/2008/10/28/1321562.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/zqonline/comments/commentRss/1321562.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/zqonline/services/trackbacks/1321562.html</trackback:ping><description><![CDATA[<blockquote>
<p>使用.Net多年，没有什么进步，比较困惑。可能是非主流的原因，很多时候一个问题，能用代码来解决，确无法用文字来解释，为了增强这方面的功力，接下来把自己正在开发的一个数据层拿出来说话。可能这是在重复造轮子，对于小系统来说自己造的轮子，也许用起来更顺手。</p>
</blockquote>
<blockquote>
<p>此物的目的：也就是一个数据访问的功能。</p>
<p>希望能支持多种数据库：</p>
<ol>
<li>Access2000，写一个小东西用它还是不错的。 </li>
<li>SQLSERVER，不用说，肯定要支持它，我也只对它比较熟一些。 </li>
<li>MySql，有时使用SQLSERVER增加了客户的成本，不过这个东西维护人员也不好找吧，当然你用盗版列外。当然我还没有用过，在写这个组件的同时，慢慢学习。 </li>
</ol>
<p>以下是在接下来的演示中需要用到的表结构图：</p>
<p><a href="/images/cnblogs_com/zqonline/WindowsLiveWriter/VB.NetORM_F5BB/1_2.jpg"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" src="http://www.cnblogs.com/images/cnblogs_com/zqonline/WindowsLiveWriter/VB.NetORM_F5BB/1_thumb.jpg" border="0" alt="1" width="244" height="178" /></a></p>
<script type="text/javascript"><!--
google_ad_client = "pub-7518451961016636";
/* 468x15, 创建于 08-10-22 */
google_ad_slot = "4394388348";
google_ad_width = 468;
google_ad_height = 15;
// --></script>
<script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"></script>
<p>这里有三个表，实体与表是一对一的。也相应的有三个实体，实体我一般都是放在命名空间Common下的。下面我简单的列出主表的实体代码。</p>
<pre class="csharpcode"><span class="kwrd">Imports</span> At.Data
<span class="kwrd">Imports</span> At.Core
<span class="kwrd">Imports</span> System.ComponentModel
<span class="kwrd">Namespace</span> Common
    <span class="kwrd">Public</span> <span class="kwrd">Class</span> 主表
        <span class="kwrd">Inherits</span> EntityBase
<span class="preproc">#Region</span> <span class="str">"类实例化"</span>
        <span class="kwrd">Public</span> <span class="kwrd">Sub</span> <span class="kwrd">New</span>()
            <span class="kwrd">MyBase</span>.<span class="kwrd">new</span>()
        <span class="kwrd">End</span> <span class="kwrd">Sub</span>
<span class="preproc">#End Region</span>
<span class="preproc">#Region</span> <span class="str">"实体字段描述"</span>
        <span class="kwrd">Private</span> f_ID <span class="kwrd">As</span> IEntityField

        &lt;Browsable(<span class="kwrd">False</span>)&gt; _
        <span class="kwrd">Public</span> <span class="kwrd">Overridable</span> <span class="kwrd">ReadOnly</span> <span class="kwrd">Property</span> _ID() <span class="kwrd">As</span> IEntityField
            <span class="kwrd">Get</span>
                <span class="kwrd">If</span> f_ID <span class="kwrd">Is</span> <span class="kwrd">Nothing</span> <span class="kwrd">Then</span>
                    f_ID = <span class="kwrd">Me</span>.DataHelper.GetEntityField</pre>
<pre class="csharpcode">(<span class="kwrd">Me</span>, <span class="str">"ID"</span>, <span class="str">"ID"</span>, <span class="kwrd">True</span>, <span class="kwrd">False</span>, DbType.Int32, 4)
                <span class="kwrd">End</span> <span class="kwrd">If</span>
                <span class="kwrd">Return</span> f_ID
            <span class="kwrd">End</span> <span class="kwrd">Get</span>
        <span class="kwrd">End</span> <span class="kwrd">Property</span>

        <span class="kwrd">Private</span> f_物品编号 <span class="kwrd">As</span> IEntityField

        &lt;Browsable(<span class="kwrd">False</span>)&gt; _
        <span class="kwrd">Public</span> <span class="kwrd">Overridable</span> <span class="kwrd">ReadOnly</span> <span class="kwrd">Property</span> _物品编号() <span class="kwrd">As</span> IEntityField
            <span class="kwrd">Get</span>
                <span class="kwrd">If</span> f_物品编号 <span class="kwrd">Is</span> <span class="kwrd">Nothing</span> <span class="kwrd">Then</span>
                    f_物品编号 = <span class="kwrd">Me</span>.DataHelper.GetEntityField</pre>
<pre class="csharpcode">                    (<span class="kwrd">Me</span>, <span class="str">"物品编号"</span>, <span class="str">"物品编号"</span>, <span class="kwrd">False</span>, <span class="kwrd">False</span>, DbType.<span class="kwrd">String</span>, 50)
                <span class="kwrd">End</span> <span class="kwrd">If</span>
                <span class="kwrd">Return</span> f_物品编号
            <span class="kwrd">End</span> <span class="kwrd">Get</span>
        <span class="kwrd">End</span> <span class="kwrd">Property</span>

        <span class="kwrd">Private</span> f_物品名称 <span class="kwrd">As</span> IEntityField

        &lt;Browsable(<span class="kwrd">False</span>)&gt; _
        <span class="kwrd">Public</span> <span class="kwrd">Overridable</span> <span class="kwrd">ReadOnly</span> <span class="kwrd">Property</span> _物品名称() <span class="kwrd">As</span> IEntityField
            <span class="kwrd">Get</span>
                <span class="kwrd">If</span> f_物品名称 <span class="kwrd">Is</span> <span class="kwrd">Nothing</span> <span class="kwrd">Then</span>
                    f_物品名称 = <span class="kwrd">Me</span>.DataHelper.GetEntityField</pre>
<pre class="csharpcode">                    (<span class="kwrd">Me</span>, <span class="str">"物品名称"</span>, <span class="str">"物品名称"</span>, <span class="kwrd">False</span>, <span class="kwrd">False</span>, DbType.<span class="kwrd">String</span>, 50)
                <span class="kwrd">End</span> <span class="kwrd">If</span>
                <span class="kwrd">Return</span> f_物品名称
            <span class="kwrd">End</span> <span class="kwrd">Get</span>
        <span class="kwrd">End</span> <span class="kwrd">Property</span>

        <span class="kwrd">Private</span> f_物品型号 <span class="kwrd">As</span> IEntityField

        &lt;Browsable(<span class="kwrd">False</span>)&gt; _
        <span class="kwrd">Public</span> <span class="kwrd">Overridable</span> <span class="kwrd">ReadOnly</span> <span class="kwrd">Property</span> _物品型号() <span class="kwrd">As</span> IEntityField
            <span class="kwrd">Get</span>
                <span class="kwrd">If</span> f_物品型号 <span class="kwrd">Is</span> <span class="kwrd">Nothing</span> <span class="kwrd">Then</span>
                    f_物品型号 = <span class="kwrd">Me</span>.DataHelper.GetEntityField</pre>
<pre class="csharpcode">                 (<span class="kwrd">Me</span>, <span class="str">"物品型号"</span>, <span class="str">"物品型号"</span>, <span class="kwrd">False</span>, <span class="kwrd">False</span>, DbType.<span class="kwrd">String</span>, 50)
                <span class="kwrd">End</span> <span class="kwrd">If</span>
                <span class="kwrd">Return</span> f_物品型号
            <span class="kwrd">End</span> <span class="kwrd">Get</span>
        <span class="kwrd">End</span> <span class="kwrd">Property</span>

        <span class="kwrd">Private</span> f_单位 <span class="kwrd">As</span> IEntityField

        &lt;Browsable(<span class="kwrd">False</span>)&gt; _
        <span class="kwrd">Public</span> <span class="kwrd">Overridable</span> <span class="kwrd">ReadOnly</span> <span class="kwrd">Property</span> _单位() <span class="kwrd">As</span> IEntityField
            <span class="kwrd">Get</span>
                <span class="kwrd">If</span> f_单位 <span class="kwrd">Is</span> <span class="kwrd">Nothing</span> <span class="kwrd">Then</span>
                    f_单位 = <span class="kwrd">Me</span>.DataHelper.GetEntityField</pre>
<pre class="csharpcode">                    (<span class="kwrd">Me</span>, <span class="str">"单位"</span>, <span class="str">"单位"</span>, <span class="kwrd">False</span>, <span class="kwrd">False</span>, DbType.<span class="kwrd">String</span>, 50)
                <span class="kwrd">End</span> <span class="kwrd">If</span>
                <span class="kwrd">Return</span> f_单位
            <span class="kwrd">End</span> <span class="kwrd">Get</span>
        <span class="kwrd">End</span> <span class="kwrd">Property</span>

        <span class="kwrd">Private</span> f_生产厂家 <span class="kwrd">As</span> IEntityField

        &lt;Browsable(<span class="kwrd">False</span>)&gt; _
        <span class="kwrd">Public</span> <span class="kwrd">Overridable</span> <span class="kwrd">ReadOnly</span> <span class="kwrd">Property</span> _生产厂家() <span class="kwrd">As</span> IEntityField
            <span class="kwrd">Get</span>
                <span class="kwrd">If</span> f_生产厂家 <span class="kwrd">Is</span> <span class="kwrd">Nothing</span> <span class="kwrd">Then</span>
                    f_生产厂家 = <span class="kwrd">Me</span>.DataHelper.GetEntityField</pre>
<pre class="csharpcode">        (<span class="kwrd">Me</span>, <span class="str">"生产厂家"</span>, <span class="str">"生产厂家"</span>, <span class="kwrd">False</span>, <span class="kwrd">False</span>, DbType.<span class="kwrd">String</span>, 50)
                <span class="kwrd">End</span> <span class="kwrd">If</span>
                <span class="kwrd">Return</span> f_生产厂家
            <span class="kwrd">End</span> <span class="kwrd">Get</span>
        <span class="kwrd">End</span> <span class="kwrd">Property</span>

        <span class="kwrd">Private</span> f_库存量 <span class="kwrd">As</span> IEntityField

        &lt;Browsable(<span class="kwrd">False</span>)&gt; _
        <span class="kwrd">Public</span> <span class="kwrd">Overridable</span> <span class="kwrd">ReadOnly</span> <span class="kwrd">Property</span> _库存量() <span class="kwrd">As</span> IEntityField
            <span class="kwrd">Get</span>
                <span class="kwrd">If</span> f_库存量 <span class="kwrd">Is</span> <span class="kwrd">Nothing</span> <span class="kwrd">Then</span>
                    f_库存量 = <span class="kwrd">Me</span>.DataHelper.GetEntityField</pre>
<pre class="csharpcode">   (<span class="kwrd">Me</span>, <span class="str">"库存量"</span>, <span class="str">"库存量"</span>, <span class="kwrd">False</span>, <span class="kwrd">False</span>, DbType.<span class="kwrd">Decimal</span>, 9)
                <span class="kwrd">End</span> <span class="kwrd">If</span>
                <span class="kwrd">Return</span> f_库存量
            <span class="kwrd">End</span> <span class="kwrd">Get</span>
        <span class="kwrd">End</span> <span class="kwrd">Property</span>

        <span class="kwrd">Private</span> f_库存金额 <span class="kwrd">As</span> IEntityField

        &lt;Browsable(<span class="kwrd">False</span>)&gt; _
        <span class="kwrd">Public</span> <span class="kwrd">Overridable</span> <span class="kwrd">ReadOnly</span> <span class="kwrd">Property</span> _库存金额() <span class="kwrd">As</span> IEntityField
            <span class="kwrd">Get</span>
                <span class="kwrd">If</span> f_库存金额 <span class="kwrd">Is</span> <span class="kwrd">Nothing</span> <span class="kwrd">Then</span>
                    f_库存金额 = <span class="kwrd">Me</span>.DataHelper.GetEntityField</pre>
<pre class="csharpcode">    (<span class="kwrd">Me</span>, <span class="str">"库存金额"</span>, <span class="str">"库存金额"</span>, <span class="kwrd">False</span>, <span class="kwrd">False</span>, DbType.<span class="kwrd">Decimal</span>, 9)
                <span class="kwrd">End</span> <span class="kwrd">If</span>
                <span class="kwrd">Return</span> f_库存金额
            <span class="kwrd">End</span> <span class="kwrd">Get</span>
        <span class="kwrd">End</span> <span class="kwrd">Property</span>


<span class="preproc">#End Region</span>
<span class="preproc">#Region</span> <span class="str">"实体属性"</span>
        <span class="kwrd">Private</span> md_ID <span class="kwrd">As</span> <span class="kwrd">Integer</span>

        &lt;Browsable(<span class="kwrd">True</span>)&gt; _
        <span class="kwrd">Public</span> <span class="kwrd">Overridable</span> <span class="kwrd">Property</span> ID() <span class="kwrd">As</span> <span class="kwrd">Integer</span>
            <span class="kwrd">Get</span>
                <span class="kwrd">Return</span> md_ID
            <span class="kwrd">End</span> <span class="kwrd">Get</span>
            <span class="kwrd">Set</span>(<span class="kwrd">ByVal</span> Value <span class="kwrd">As</span> <span class="kwrd">Integer</span>)
                <span class="kwrd">If</span> value &lt;&gt; md_ID <span class="kwrd">Then</span>
                    md_ID = Value
                    <span class="kwrd">Me</span>.OnPropertyChanged(<span class="str">"ID"</span>)
                <span class="kwrd">End</span> <span class="kwrd">If</span>
            <span class="kwrd">End</span> <span class="kwrd">Set</span>
        <span class="kwrd">End</span> <span class="kwrd">Property</span>

        <span class="kwrd">Private</span> md_物品编号 <span class="kwrd">As</span> <span class="kwrd">String</span> = <span class="kwrd">String</span>.Empty

        &lt;Browsable(<span class="kwrd">True</span>)&gt; _
        <span class="kwrd">Public</span> <span class="kwrd">Overridable</span> <span class="kwrd">Property</span> 物品编号() <span class="kwrd">As</span> <span class="kwrd">String</span>
            <span class="kwrd">Get</span>
                <span class="kwrd">Return</span> md_物品编号
            <span class="kwrd">End</span> <span class="kwrd">Get</span>
            <span class="kwrd">Set</span>(<span class="kwrd">ByVal</span> Value <span class="kwrd">As</span> <span class="kwrd">String</span>)
                <span class="kwrd">If</span> value &lt;&gt; md_物品编号 <span class="kwrd">Then</span>
                    md_物品编号 = Value
                    <span class="kwrd">Me</span>.OnPropertyChanged(<span class="str">"物品编号"</span>)
                <span class="kwrd">End</span> <span class="kwrd">If</span>
            <span class="kwrd">End</span> <span class="kwrd">Set</span>
        <span class="kwrd">End</span> <span class="kwrd">Property</span>

        <span class="kwrd">Private</span> md_物品名称 <span class="kwrd">As</span> <span class="kwrd">String</span> = <span class="kwrd">String</span>.Empty

        &lt;Browsable(<span class="kwrd">True</span>)&gt; _
        <span class="kwrd">Public</span> <span class="kwrd">Overridable</span> <span class="kwrd">Property</span> 物品名称() <span class="kwrd">As</span> <span class="kwrd">String</span>
            <span class="kwrd">Get</span>
                <span class="kwrd">Return</span> md_物品名称
            <span class="kwrd">End</span> <span class="kwrd">Get</span>
            <span class="kwrd">Set</span>(<span class="kwrd">ByVal</span> Value <span class="kwrd">As</span> <span class="kwrd">String</span>)
                <span class="kwrd">If</span> value &lt;&gt; md_物品名称 <span class="kwrd">Then</span>
                    md_物品名称 = Value
                    <span class="kwrd">Me</span>.OnPropertyChanged(<span class="str">"物品名称"</span>)
                <span class="kwrd">End</span> <span class="kwrd">If</span>
            <span class="kwrd">End</span> <span class="kwrd">Set</span>
        <span class="kwrd">End</span> <span class="kwrd">Property</span>

        <span class="kwrd">Private</span> md_物品型号 <span class="kwrd">As</span> <span class="kwrd">String</span> = <span class="kwrd">String</span>.Empty

        &lt;Browsable(<span class="kwrd">True</span>)&gt; _
        <span class="kwrd">Public</span> <span class="kwrd">Overridable</span> <span class="kwrd">Property</span> 物品型号() <span class="kwrd">As</span> <span class="kwrd">String</span>
            <span class="kwrd">Get</span>
                <span class="kwrd">Return</span> md_物品型号
            <span class="kwrd">End</span> <span class="kwrd">Get</span>
            <span class="kwrd">Set</span>(<span class="kwrd">ByVal</span> Value <span class="kwrd">As</span> <span class="kwrd">String</span>)
                <span class="kwrd">If</span> value &lt;&gt; md_物品型号 <span class="kwrd">Then</span>
                    md_物品型号 = Value
                    <span class="kwrd">Me</span>.OnPropertyChanged(<span class="str">"物品型号"</span>)
                <span class="kwrd">End</span> <span class="kwrd">If</span>
            <span class="kwrd">End</span> <span class="kwrd">Set</span>
        <span class="kwrd">End</span> <span class="kwrd">Property</span>

        <span class="kwrd">Private</span> md_单位 <span class="kwrd">As</span> <span class="kwrd">String</span> = <span class="kwrd">String</span>.Empty

        &lt;Browsable(<span class="kwrd">True</span>)&gt; _
        <span class="kwrd">Public</span> <span class="kwrd">Overridable</span> <span class="kwrd">Property</span> 单位() <span class="kwrd">As</span> <span class="kwrd">String</span>
            <span class="kwrd">Get</span>
                <span class="kwrd">Return</span> md_单位
            <span class="kwrd">End</span> <span class="kwrd">Get</span>
            <span class="kwrd">Set</span>(<span class="kwrd">ByVal</span> Value <span class="kwrd">As</span> <span class="kwrd">String</span>)
                <span class="kwrd">If</span> value &lt;&gt; md_单位 <span class="kwrd">Then</span>
                    md_单位 = Value
                    <span class="kwrd">Me</span>.OnPropertyChanged(<span class="str">"单位"</span>)
                <span class="kwrd">End</span> <span class="kwrd">If</span>
            <span class="kwrd">End</span> <span class="kwrd">Set</span>
        <span class="kwrd">End</span> <span class="kwrd">Property</span>

        <span class="kwrd">Private</span> md_生产厂家 <span class="kwrd">As</span> <span class="kwrd">String</span> = <span class="kwrd">String</span>.Empty

        &lt;Browsable(<span class="kwrd">True</span>)&gt; _
        <span class="kwrd">Public</span> <span class="kwrd">Overridable</span> <span class="kwrd">Property</span> 生产厂家() <span class="kwrd">As</span> <span class="kwrd">String</span>
            <span class="kwrd">Get</span>
                <span class="kwrd">Return</span> md_生产厂家
            <span class="kwrd">End</span> <span class="kwrd">Get</span>
            <span class="kwrd">Set</span>(<span class="kwrd">ByVal</span> Value <span class="kwrd">As</span> <span class="kwrd">String</span>)
                <span class="kwrd">If</span> value &lt;&gt; md_生产厂家 <span class="kwrd">Then</span>
                    md_生产厂家 = Value
                    <span class="kwrd">Me</span>.OnPropertyChanged(<span class="str">"生产厂家"</span>)
                <span class="kwrd">End</span> <span class="kwrd">If</span>
            <span class="kwrd">End</span> <span class="kwrd">Set</span>
        <span class="kwrd">End</span> <span class="kwrd">Property</span>

        <span class="kwrd">Private</span> md_库存量 <span class="kwrd">As</span> <span class="kwrd">Decimal</span>

        &lt;Browsable(<span class="kwrd">True</span>)&gt; _
        <span class="kwrd">Public</span> <span class="kwrd">Overridable</span> <span class="kwrd">Property</span> 库存量() <span class="kwrd">As</span> <span class="kwrd">Decimal</span>
            <span class="kwrd">Get</span>
                <span class="kwrd">Return</span> format(md_库存量, <span class="str">"0.######"</span>)
            <span class="kwrd">End</span> <span class="kwrd">Get</span>
            <span class="kwrd">Set</span>(<span class="kwrd">ByVal</span> Value <span class="kwrd">As</span> <span class="kwrd">Decimal</span>)
                <span class="kwrd">If</span> value &lt;&gt; md_库存量 <span class="kwrd">Then</span>
                    md_库存量 = Value
                    <span class="kwrd">Me</span>.OnPropertyChanged(<span class="str">"库存量"</span>)
                <span class="kwrd">End</span> <span class="kwrd">If</span>
            <span class="kwrd">End</span> <span class="kwrd">Set</span>
        <span class="kwrd">End</span> <span class="kwrd">Property</span>

        <span class="kwrd">Private</span> md_库存金额 <span class="kwrd">As</span> <span class="kwrd">Decimal</span>

        &lt;Browsable(<span class="kwrd">True</span>)&gt; _
        <span class="kwrd">Public</span> <span class="kwrd">Overridable</span> <span class="kwrd">Property</span> 库存金额() <span class="kwrd">As</span> <span class="kwrd">Decimal</span>
            <span class="kwrd">Get</span>
                <span class="kwrd">Return</span> format(md_库存金额, <span class="str">"0.######"</span>)
            <span class="kwrd">End</span> <span class="kwrd">Get</span>
            <span class="kwrd">Set</span>(<span class="kwrd">ByVal</span> Value <span class="kwrd">As</span> <span class="kwrd">Decimal</span>)
                <span class="kwrd">If</span> value &lt;&gt; md_库存金额 <span class="kwrd">Then</span>
                    md_库存金额 = Value
                    <span class="kwrd">Me</span>.OnPropertyChanged(<span class="str">"库存金额"</span>)
                <span class="kwrd">End</span> <span class="kwrd">If</span>
            <span class="kwrd">End</span> <span class="kwrd">Set</span>
        <span class="kwrd">End</span> <span class="kwrd">Property</span>


<span class="preproc">#End Region</span>
<span class="preproc">#Region</span> <span class="str">"设置实体的属性"</span>

        <span class="kwrd">Public</span> <span class="kwrd">Overrides</span> <span class="kwrd">Sub</span> SetValue(<span class="kwrd">ByVal</span> attributename <span class="kwrd">As</span> <span class="kwrd">String</span>, <span class="kwrd">ByVal</span> value <span class="kwrd">As</span> <span class="kwrd">Object</span>)
            <span class="kwrd">Select</span> <span class="kwrd">Case</span> attributename

                <span class="kwrd">Case</span> <span class="str">"ID"</span>
                    ID = value
                <span class="kwrd">Case</span> <span class="str">"物品编号"</span>
                    物品编号 = value
                <span class="kwrd">Case</span> <span class="str">"物品名称"</span>
                    物品名称 = value
                <span class="kwrd">Case</span> <span class="str">"物品型号"</span>
                    物品型号 = value
                <span class="kwrd">Case</span> <span class="str">"单位"</span>
                    单位 = value
                <span class="kwrd">Case</span> <span class="str">"生产厂家"</span>
                    生产厂家 = value
                <span class="kwrd">Case</span> <span class="str">"库存量"</span>
                    库存量 = value
                <span class="kwrd">Case</span> <span class="str">"库存金额"</span>
                    库存金额 = value
                <span class="kwrd">Case</span> <span class="kwrd">Else</span>
                    <span class="kwrd">MyBase</span>.SetValue(attributename, value)
            <span class="kwrd">End</span> <span class="kwrd">Select</span>
        <span class="kwrd">End</span> <span class="kwrd">Sub</span>
<span class="preproc">#End Region</span>
<span class="preproc">#Region</span> <span class="str">"获取实体的属性"</span>

        <span class="kwrd">Public</span> <span class="kwrd">Overrides</span> <span class="kwrd">Function</span> GetValue(<span class="kwrd">ByVal</span> attributename <span class="kwrd">As</span> <span class="kwrd">String</span>) <span class="kwrd">As</span> <span class="kwrd">Object</span>
            <span class="kwrd">Select</span> <span class="kwrd">Case</span> attributename

                <span class="kwrd">Case</span> <span class="str">"ID"</span>
                    <span class="kwrd">Return</span> ID
                <span class="kwrd">Case</span> <span class="str">"物品编号"</span>
                    <span class="kwrd">Return</span> 物品编号
                <span class="kwrd">Case</span> <span class="str">"物品名称"</span>
                    <span class="kwrd">Return</span> 物品名称
                <span class="kwrd">Case</span> <span class="str">"物品型号"</span>
                    <span class="kwrd">Return</span> 物品型号
                <span class="kwrd">Case</span> <span class="str">"单位"</span>
                    <span class="kwrd">Return</span> 单位
                <span class="kwrd">Case</span> <span class="str">"生产厂家"</span>
                    <span class="kwrd">Return</span> 生产厂家
                <span class="kwrd">Case</span> <span class="str">"库存量"</span>
                    <span class="kwrd">Return</span> 库存量
                <span class="kwrd">Case</span> <span class="str">"库存金额"</span>
                    <span class="kwrd">Return</span> 库存金额
                <span class="kwrd">Case</span> <span class="kwrd">Else</span>
                    <span class="kwrd">Return</span> <span class="kwrd">MyBase</span>.GetValue(attributename)
            <span class="kwrd">End</span> <span class="kwrd">Select</span>
        <span class="kwrd">End</span> <span class="kwrd">Function</span>
<span class="preproc">#End Region</span>
<span class="preproc">#Region</span> <span class="str">"实体其它属性"</span>

        &lt;Browsable(<span class="kwrd">False</span>)&gt; _
        <span class="kwrd">Public</span> <span class="kwrd">ReadOnly</span> <span class="kwrd">Property</span> Guid() <span class="kwrd">As</span> <span class="kwrd">String</span>
            <span class="kwrd">Get</span>
                <span class="kwrd">Return</span> <span class="str">"aee5307acf2a24a0a8e1f5c650d5e24d6"</span>
            <span class="kwrd">End</span> <span class="kwrd">Get</span>
        <span class="kwrd">End</span> <span class="kwrd">Property</span>

        &lt;Browsable(<span class="kwrd">False</span>)&gt; _
        <span class="kwrd">Public</span> <span class="kwrd">Overrides</span> <span class="kwrd">ReadOnly</span> <span class="kwrd">Property</span> TableName() <span class="kwrd">As</span> <span class="kwrd">String</span>
            <span class="kwrd">Get</span>
                <span class="kwrd">Return</span> <span class="str">"主表"</span>
            <span class="kwrd">End</span> <span class="kwrd">Get</span>
        <span class="kwrd">End</span> <span class="kwrd">Property</span>

        &lt;Browsable(<span class="kwrd">False</span>)&gt; _
        <span class="kwrd">Public</span> <span class="kwrd">Overrides</span> <span class="kwrd">ReadOnly</span> <span class="kwrd">Property</span> AutoIncrement() <span class="kwrd">As</span> IEntityField
            <span class="kwrd">Get</span>
                <span class="kwrd">Return</span> _ID
            <span class="kwrd">End</span> <span class="kwrd">Get</span>
        <span class="kwrd">End</span> <span class="kwrd">Property</span>
<span class="preproc">#End Region</span>
    <span class="kwrd">End</span> <span class="kwrd">Class</span>
<span class="kwrd">End</span> <span class="kwrd">Namespace</span>
</pre>
<!--
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
--><!--
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
--></blockquote>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 表里的每个字段映射到实体对象的实体字段（IEntityField对象），这里没有采用XML配置文件或属性的方式。使用XML文件太繁杂，特别是系统经常进行调整和修改时会很头痛。属性的方式比较字段，但是不能按一个常规对象来进行访问。曾在前两年使用过这种方式。</p>
<p>
<script type="text/javascript"><!--
google_ad_client = "pub-7518451961016636";
/* 468x60, 创建于 08-10-19 */
google_ad_slot = "7558631882";
google_ad_width = 468;
google_ad_height = 60;
// --></script>
<script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"></script>
</p>
<blockquote>
<p>属性解说：</p>
<p>TableName：对应的是数据库的表名，有时我们可能需要在同一服务器上进行跨库访问，可以不用修改数据库连接字符串，直接设置实体对象的DbName名称就可以，以后会有这方面的例子。</p>
<p>AutoIncrement：是对应的自动增长字段，虽然我们可以通过IEntityField对象可以判断出那个字段是AutoIncrement的，这样需要一个循环，所以这里就单独的公开了一个属性。如果需要对实体进行CRUD操作，则必须要设置一个字段为自动增长字段。当然你可以不设，那么CRUD操作，就需要你自己写代码了。</p>
<p>Guid:这个属性没有实际意义，正在考虑，是否去掉。</p>
<p>SetValue,GetValue:这个方法是重写基类的，基类的SetValue和GetValue是使用反射的形式把DataRow对象转换为一个实体对象，反射的效率比较差，所以这里就采用了折衷的方法，使用硬编码。</p>
<p>OnPropertyChanged:这个方法用于当字段的值发生变化时，引发一个事件。</p>
<p>DataHelper.GetEntityField:用于根据当前数据库获取一个字段描述对象，我称为字段对象。</p>
<p>对这个实体对象就简单介绍完了，如果您有兴趣讲继续关注。一个简单的数据访问层！</p>
</blockquote><img src ="http://www.cnblogs.com/zqonline/aggbug/1321562.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/43604/" target="_blank">[新闻]微软公布免费安全软件计划</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>[转载]Access是否支持T-SQL中的IsNull()？</title><link>http://www.cnblogs.com/zqonline/archive/2008/10/28/1321370.html</link><dc:creator>zqonline</dc:creator><author>zqonline</author><pubDate>Tue, 28 Oct 2008 07:02:00 GMT</pubDate><guid>http://www.cnblogs.com/zqonline/archive/2008/10/28/1321370.html</guid><wfw:comment>http://www.cnblogs.com/zqonline/comments/1321370.html</wfw:comment><comments>http://www.cnblogs.com/zqonline/archive/2008/10/28/1321370.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/zqonline/comments/commentRss/1321370.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/zqonline/services/trackbacks/1321370.html</trackback:ping><description><![CDATA[<script type="text/javascript"><!--
google_ad_client = "pub-7518451961016636";
/* 468x60, 创建于 08-10-19 */
google_ad_slot = "7558631882";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>  <p>Access也有IsNull函数，但意义和参数却和T-SQL中的不同。 <p>在T-SQL（也就是SQL Server所支持的SQL语言）中，IsNull的作用是把空值替代成指定的值。然而在Access中，IsNull的作用仅仅是判断是否为空值，而且参数的个数也和T-SQL中的不一样，只有一个输入参数。<br>庆幸的是Access支持iif，所以可以这样去替代：<br>Select iif(IsNull( <em><u>express</u></em> ), <u><em>value1</em></u>, <em><u>value2</u> </em>) From <em><u>TableName</u></em> <p>iif(IsNull( <em><u>express</u></em> ), <em><u>value1</u></em>, <em><u>value2</u></em> )<br>相当于：<br>If <em><u>express</u></em> Is Null Then<br>&nbsp;&nbsp;&nbsp; Return <em><u>value1</u></em><br>Else<br>&nbsp;&nbsp;&nbsp; Return <em><u>value2</u></em><br>End if <p>举个例子，在SQL Server中：<br>select IsNull(<em><u>int_Filed1</u></em>, 0) from <u><em>Table1</em></u> <p>换作Access，则应该被改写为：<br>select iif( IsNull(<u><em>int_Filed1</em></u>), 0, <u><em>int_Filed1</em></u> ) from <u><em>Table1</em></u> <p></p> <script type="text/javascript"><!--
google_ad_client = "pub-7518451961016636";
/* 468x15, 创建于 08-10-22 */
google_ad_slot = "4394388348";
google_ad_width = 468;
google_ad_height = 15;
//-->
</script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script><img src ="http://www.cnblogs.com/zqonline/aggbug/1321370.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/43604/" target="_blank">[新闻]微软公布免费安全软件计划</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>ACCESS中使用SQL语句应注意的地方、与sql server的区别及几点技巧（整理中）</title><link>http://www.cnblogs.com/zqonline/archive/2008/10/28/1321183.html</link><dc:creator>zqonline</dc:creator><author>zqonline</author><pubDate>Tue, 28 Oct 2008 04:43:00 GMT</pubDate><guid>http://www.cnblogs.com/zqonline/archive/2008/10/28/1321183.html</guid><wfw:comment>http://www.cnblogs.com/zqonline/comments/1321183.html</wfw:comment><comments>http://www.cnblogs.com/zqonline/archive/2008/10/28/1321183.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/zqonline/comments/commentRss/1321183.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/zqonline/services/trackbacks/1321183.html</trackback:ping><description><![CDATA[<p>以下SQL语句在ACCESS XP的查询中测试通过    <br />建表:     <br />Create Table Tab1 (     <br />ID Counter,     <br />Name string,     <br />Age integer,     <br />[Date] DateTime);     <br />技巧:     <br />自增字段用 Counter 声明.     <br />字段名为关键字的字段用方括号[]括起来,数字作为字段名也可行. </p>  <p>建立索引:    <br />下面的语句在Tab1的Date列上建立可重复索引     <br />Create Index iDate ON Tab1 ([Date]);     <br />完成后ACCESS中字段Date索引属性显示为 - 有(有重复).     <br />下面的语句在Tab1的Name列上建立不可重复索引     <br />Create Unique Index iName ON Tab1 (Name);     <br />完成后ACCESS中字段Name索引属性显示为 - 有(无重复).     <br />下面的语句删除刚才建立的两个索引     <br />Drop Index iDate ON Tab1;     <br />Drop Index iName ON Tab1; </p>  <script type="text/javascript"><!--
google_ad_client = "pub-7518451961016636";
/* 468x60, 创建于 08-10-19 */
google_ad_slot = "7558631882";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script> <p>ACCESS与SQLSERVER中的UPDATE语句对比:    <br />SQLSERVER中更新多表的UPDATE语句:     <br />UPDATE Tab1     <br />SET a.Name = b.Name     <br />FROM Tab1 a,Tab2 b     <br />WHERE a.ID = b.ID;     <br />同样功能的SQL语句在ACCESS中应该是     <br />UPDATE Tab1 a,Tab2 b     <br />SET a.Name = b.Name     <br />WHERE a.ID = b.ID;     <br />即:ACCESS中的UPDATE语句没有FROM子句,所有引用的表都列在UPDATE关键字后.     <br />上例中如果Tab2可以不是一个表,而是一个查询,例:     <br />UPDATE Tab1 a,(Select ID,Name From Tab2) b     <br />SET a.Name = b.Name     <br />WHERE a.ID = b.ID; </p>  <p>访问多个不同的ACCESS数据库-在SQL中使用In子句:    <br />Select a.*,b.* From Tab1 a,Tab2 b In 'db2.mdb' Where a.ID=b.ID;     <br />上面的SQL语句查询出当前数据库中Tab1和db2.mdb(当前文件夹中)中Tab2以ID为关联的所有记录.     <br />缺点-外部数据库不能带密码. </p>  <p>在ACCESS中访问其它ODBC数据源    <br />下例在ACCESS中查询SQLSERVER中的数据     <br />SELECT * FROM Tab1 IN [ODBC]     <br />[ODBC;Driver=SQL Server;UID=sa;PWD=;Server=127.0.0.1;DataBase=Demo;]     <br />外部数据源连接属性的完整参数是:     <br />[ODBC;DRIVER=driver;SERVER=server;DATABASE=database;UID=user;PWD=password;]     <br />其中的DRIVER=driver可以在注册表中的     <br />HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\     <br />中找到 </p>  <p>ACCESS支持子查询 </p>  <p>ACCESS支持外连接,但不包括完整外部联接,如支持    <br />LEFT JOIN 或 RIGHT JOIN     <br />但不支持     <br />FULL OUTER JOIN 或 FULL JOIN </p>  <p>ACCESS中的日期查询    <br />注意:ACCESS中的日期时间分隔符是#而不是引号     <br />Select * From Tab1 Where [Date]&gt;#2002-1-1#;     <br />在DELPHI中我这样用     <br />SQL.Add(Format(     <br />'Select * From Tab1 Where [Date]&gt;#%s#;',     <br />[DateToStr(Date)])); </p>  <p>ACCESS中的字符串可以用双引号分隔,但SQLSERVER不认,所以为了迁移方便和兼容,    <br />建议用单引号作为字符串分隔符.     <br />常在一些bbs上面看见有人在问Access转换为 MS SQL 有什么要注意的地方，或是编写存储过程，现在小弟在此写一些要注意的或者常用的语法给大家参考（部分为asp常用的函数）    <br />－－－－－－－－－－－－－－－－－－－    <br />Access ： Now()    <br />MS SQL ： GetDate()    <br />－－－－－－－－－－－－－－－－－－－    <br />Access ： mid    <br />MS SQL ： SubString( expression , start , length )    <br />expression－要搜索的目标，但不能使用聚合函数    <br />start－指定字符串的开始位置    <br />length－指定获取字符串的长度    <br />－－－－－－－－－－－－－－－－－－－    <br />Asp ： Instr    <br />MS SQL：CharIndex( expression1 , expression2 )    <br />参数的位置和 Asp 的 Instr刚好相反    <br />－－－－－－－－－－－－－－－－－－－    <br />Asp ： Dim    <br />MS SQL ： Declare @variable DataType    <br />举例：Declare @VarName VarChar(50) 声明变量@VarName为VarChar类型，长度为50    <br />－－－－－－－－－－－－－－－－－－－    <br />赋值：    <br />Declare @VarName VarChar(10)    <br />Set @VarName = 'This is Content'    <br />－－－－－－－－－－－－－－－－－－－    <br />数据类型转换函数，如 Asp 的 Cstr，Clng    <br />MS SQL ： Cast( expression As DataType)    <br />expression 为目标对象    <br />DataType 为要转换成的数据类型    <br />举例：    <br />Declare @VarName VarChar(20) -- 声明一个 @VarName 变量为VarChar类型，长度20    <br />Set @VarName = '2' -- 给 @VarName 赋值    <br />Cast( @VarName As Int) -- 转换成 Int 类型数据    <br />－－－－－－－－－－－－－－－－－－－    <br />字符串连接符号： +    <br />－－－－－－－－－－－－－－－－－－－    <br />循环：    <br />While Boolean_expression    <br />Begin    <br />-- 要执行的语句    <br />End    <br />Boolean_expression 为布尔表达式，只要指定的条件为真，就循环执行语句    <br />－－－－－－－－－－－－－－－－－－－    <br />if 的用法    <br />if (Boolean_expression)    <br />Begin    <br />-- 执行 True 分支....    <br />End    <br />if....else.... 的用法    <br />if (Boolean_expression)    <br />Begin    <br />-- 执行 True 分支....    <br />End    <br />Else    <br />Begin    <br />-- 执行 False 分支    <br />End</p> <script type="text/javascript"><!--
google_ad_client = "pub-7518451961016636";
/* 468x15, 创建于 08-10-22 */
google_ad_slot = "4394388348";
google_ad_width = 468;
google_ad_height = 15;
//-->
</script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script> <p>原文:<a title="http://www.cnblogs.com/zhuor/archive/2006/07/28/462232.html" href="http://www.cnblogs.com/zhuor/archive/2006/07/28/462232.html">http://www.cnblogs.com/zhuor/archive/2006/07/28/462232.html</a></p><img src ="http://www.cnblogs.com/zqonline/aggbug/1321183.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/43604/" target="_blank">[新闻]微软公布免费安全软件计划</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>Access转换为 MS SQL 有什么要注意的地方</title><link>http://www.cnblogs.com/zqonline/archive/2008/10/28/1321177.html</link><dc:creator>zqonline</dc:creator><author>zqonline</author><pubDate>Tue, 28 Oct 2008 04:36:00 GMT</pubDate><guid>http://www.cnblogs.com/zqonline/archive/2008/10/28/1321177.html</guid><wfw:comment>http://www.cnblogs.com/zqonline/comments/1321177.html</wfw:comment><comments>http://www.cnblogs.com/zqonline/archive/2008/10/28/1321177.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/zqonline/comments/commentRss/1321177.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/zqonline/services/trackbacks/1321177.html</trackback:ping><description><![CDATA[<p></p>  <p>常在一些bbs上面看见有人在问Access转换为 MS SQL 有什么要注意的地方，或是编写存储过程，现在小弟在此写一些要注意的或者常用的语法给大家参考（部分为asp常用的函数）</p> <script type="text/javascript"><!--
google_ad_client = "pub-7518451961016636";
/* 468x15, 创建于 08-10-22 */
google_ad_slot = "4394388348";
google_ad_width = 468;
google_ad_height = 15;
//-->
</script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script> <p>－－－－－－－－－－－－－－－－－－－</p>  <p>Access ： Now()</p>  <p>MS SQL ： GetDate()</p>  <p>－－－－－－－－－－－－－－－－－－－</p>  <p>Access ： mid</p>  <p>MS SQL ： SubString( expression , start , length )   <br />expression－要搜索的目标，但不能使用聚合函数    <br />start－指定字符串的开始位置    <br />length－指定获取字符串的长度</p>  <p>－－－－－－－－－－－－－－－－－－－</p>  <p>Asp ： Instr</p>  <p>MS SQL：CharIndex( expression1 , expression2 )   <br />参数的位置和 Asp 的 Instr刚好相反</p>  <p>－－－－－－－－－－－－－－－－－－－</p>  <p>Asp ： Dim</p>  <p>MS SQL ： Declare @variable DataType   <br />举例：Declare @VarName VarChar(50)&#160;&#160;&#160; 声明变量@VarName为VarChar类型，长度为50</p>  <p>－－－－－－－－－－－－－－－－－－－</p>  <p>赋值：   <br />Declare @VarName VarChar(10)    <br />Set @VarName = 'This is Content'</p>  <p>－－－－－－－－－－－－－－－－－－－</p>  <p>数据类型转换函数，如 Asp 的 Cstr，Clng</p>  <p>MS SQL ： Cast( expression As DataType)   <br />expression 为目标对象    <br />DataType 为要转换成的数据类型</p>  <p>举例：</p>  <p>Declare @VarName VarChar(20)&#160;&#160; -- 声明一个 @VarName 变量为VarChar类型，长度20   <br />Set @VarName = '2'&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; -- 给 @VarName 赋值    <br />Cast( @VarName As Int)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; -- 转换成 Int 类型数据</p>  <p>－－－－－－－－－－－－－－－－－－－</p>  <p>字符串连接符号： +</p>  <p>－－－－－－－－－－－－－－－－－－－</p>  <p>循环：</p>  <p>While Boolean_expression   <br />&#160;&#160;&#160; Begin    <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; -- 要执行的语句    <br />&#160;&#160;&#160; End</p>  <p>Boolean_expression 为布尔表达式，只要指定的条件为真，就循环执行语句</p>  <p>－－－－－－－－－－－－－－－－－－－</p>  <p>if 的用法   <br />if (Boolean_expression)    <br />&#160;&#160;&#160; Begin    <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; -- 执行 True 分支....    <br />&#160;&#160;&#160; End</p>  <p>if....else.... 的用法   <br />if (Boolean_expression)    <br />&#160;&#160;&#160; Begin    <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; -- 执行 True 分支....    <br />&#160;&#160;&#160; End    <br />Else    <br />&#160;&#160;&#160; Begin    <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; -- 执行 False 分支    <br />&#160;&#160;&#160; End</p>  <p>－－－－－－－－－－－－－－－－－－－</p> <script type="text/javascript"><!--
google_ad_client = "pub-7518451961016636";
/* 468x60, 创建于 08-10-19 */
google_ad_slot = "7558631882";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script> <p><strong>ACCESS改为SQL需要注意哪几个地方</strong></p>  <p>看到别人有时问这个方面的问题。。于是在各网站总结前前辈高人的几点想法，拿来共享：</p>  <p>数据库导入以后，自动增加字段需要重写，所有的数字类型需要增加长度，最好用decimal。</p>  <p>所有的默认值都丢失了。主要是数字类型和日期类型。</p>  <p>所有now()，time()，date()要改成getdate()。</p>  <p>所有datediff('d', time1, time2)要改成datediff(day, time1, time2)</p>  <p>有可能一些true/false类型不能使用，要变为1/0。</p>  <p>备注类型要通过cast(column as varchar)来使用。</p>  <p>CursorType要改成1,也就是打开数据库时要给出第一个数字参数为1，否则记录可能显示不完整。</p>  <p>isnull(rowname)要改成rowname = null</p>  <p>ACCESS的数据库中的自动编号类型在转化时，sql server并没有将它设为自动编号型，我们需在SQL创建语句中加上identity，表示自动编号！</p>  <p>转化时，跟日期有关的字段，SQL SERVER默认为smalldatetime型，我们最好将它变为datetime型，因为datetime型的范围比smalldatetime型大。有时用smalldatetime型时，转化失败，而用datetime型时，转化成功。</p>  <p>对此两种数据库进行操作的sql语句不全相同，例如：在对ACCESS数据库进行删除纪录时用：&quot;delete * from user where id=10&quot;,而对SQL SERVER数据库进行删除是用：&quot;delete user where id=10&quot;.</p>  <p>日期函数不相同，在对ACCESS数据库处理中，可用date()、time()等函数，但对SQL SERVER数据库处理中，只能用datediff,dateadd等函数，而不能用date()、time()等函数。</p>  <p>在对ACCESS数据库处理中,sql语句中直接可以用一些VB的函数，像cstr()函数，而对SQL SERVER数据库处理中，却不能用。</p>  <p>&#160;</p>  <p>原文:<a title="http://www.cnblogs.com/Spring/archive/2005/05/10/152593.html" href="http://www.cnblogs.com/Spring/archive/2005/05/10/152593.html">http://www.cnblogs.com/Spring/archive/2005/05/10/152593.html</a></p><img src ="http://www.cnblogs.com/zqonline/aggbug/1321177.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/43604/" target="_blank">[新闻]微软公布免费安全软件计划</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>用最简单的方法来为自己的软件产生序列号.</title><link>http://www.cnblogs.com/zqonline/archive/2008/10/27/1320369.html</link><dc:creator>zqonline</dc:creator><author>zqonline</author><pubDate>Mon, 27 Oct 2008 05:07:00 GMT</pubDate><guid>http://www.cnblogs.com/zqonline/archive/2008/10/27/1320369.html</guid><wfw:comment>http://www.cnblogs.com/zqonline/comments/1320369.html</wfw:comment><comments>http://www.cnblogs.com/zqonline/archive/2008/10/27/1320369.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/zqonline/comments/commentRss/1320369.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/zqonline/services/trackbacks/1320369.html</trackback:ping><description><![CDATA[<p>思路是:用户提交网卡和CPU的字符串(先进行一下MD5这样不容易知道这个字符串是由什么构造出来的.)</p> <p>程序在进行判断时,把网卡和CPU组成的KEY,进行自己设定的次数据进行MD5与注册码进行判断,相等注册成功,不相等注册失败.够简单吧.</p> <script type="text/javascript"><!--
google_ad_client = "pub-7518451961016636";
/* 468x60, 创建于 08-10-19 */
google_ad_slot = "7558631882";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>  <p>1.首先需要获取网卡的MAC和CPU的ID,需要引用System.Management库</p> <p>1)获取MAC</p><pre>   <span style="color: #0000ff">Public</span> <span style="color: #0000ff">Function</span> GetMac() <span style="color: #0000ff">As</span> <span style="color: #0000ff">String</span>
        <span style="color: #0000ff">Dim</span> query <span style="color: #0000ff">As</span> System.Management.ManagementObjectSearcher = <span style="color: #0000ff">New</span> System.Management.ManagementObjectSearcher("<span style="color: #8b0000">SELECT * FROM Win32_NetworkAdapterConfiguration</span>")
        <span style="color: #0000ff">Dim</span> queryCollection <span style="color: #0000ff">As</span> System.Management.ManagementObjectCollection = query.<span style="color: #0000ff">Get</span>()
        <span style="color: #0000ff">For</span> <span style="color: #0000ff">Each</span> obj <span style="color: #0000ff">As</span> System.Management.ManagementObject <span style="color: #0000ff">In</span> queryCollection
            <span style="color: #0000ff">If</span> obj.Item("<span style="color: #8b0000">IPEnabled</span>").ToString = "<span style="color: #8b0000">True</span>" <span style="color: #0000ff">Then</span>
                <span style="color: #0000ff">Return</span> obj("<span style="color: #8b0000">MacAddress</span>").ToString.Replace("<span style="color: #8b0000">:</span>", "<span style="color: #8b0000"></span>")
            <span style="color: #0000ff">End</span> <span style="color: #0000ff">If</span>
        <span style="color: #0000ff">Next</span>
    <span style="color: #0000ff">End</span> <span style="color: #0000ff">Function</span></pre>
<script type="text/javascript"><!--
google_ad_client = "pub-7518451961016636";
/* 468x15, 创建于 08-10-22 */
google_ad_slot = "4394388348";
google_ad_width = 468;
google_ad_height = 15;
//-->
</script>
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
<pre><span style="color: #0000ff"><font color="#000000">2)获取CPUID</font></span></pre><pre>    <span style="color: #0000ff">Public</span> <span style="color: #0000ff">Function</span> GetCpuID() <span style="color: #0000ff">As</span> <span style="color: #0000ff">String</span>
        <span style="color: #0000ff">Dim</span> mc <span style="color: #0000ff">As</span> System.Management.ManagementClass = <span style="color: #0000ff">New</span> System.Management.ManagementClass("<span style="color: #8b0000">