﻿<?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>语源科技BlogJava-bob</title><link>http://www.blogjava.net/keweibo/</link><description /><language>zh-cn</language><lastBuildDate>Tue, 21 Apr 2026 06:32:20 GMT</lastBuildDate><pubDate>Tue, 21 Apr 2026 06:32:20 GMT</pubDate><ttl>60</ttl><item><title>Sqoop&amp;Hive，解决ERROR hive.HiveConfig: Could not load org.apache.hadoop.hive.conf.HiveConf. Make sure HIVE_CONF_DIR is set correctly. </title><link>http://www.blogjava.net/keweibo/articles/433143.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Tue, 03 Apr 2018 08:56:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/433143.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/433143.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/433143.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/433143.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/433143.html</trackback:ping><description><![CDATA[解决方法：<br />在 $SQOOP_HOME/lib目录下执行以下命令<br /><div>ln -s &nbsp;/app/soft/apache-hive-2.3.2-bin/lib/hive-exec-2.3.2.jar &nbsp; hive-exec-2.3.2.jar</div><div></div><code style="margin: 0px 2px; padding: 3px 4px; border-radius: 3px; font-family: Menlo, Monaco, Consolas, &quot;Andale Mono&quot;, &quot;lucida console&quot;, &quot;Courier New&quot;, monospace; background-color: #f6f6f6; color: #1a1a1a; font-size: 16px; white-space: pre-wrap;"></code><img src ="http://www.blogjava.net/keweibo/aggbug/433143.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2018-04-03 16:56 <a href="http://www.blogjava.net/keweibo/articles/433143.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>时间列转化&amp;&amp;动态指定分区Insert数据</title><link>http://www.blogjava.net/keweibo/articles/433141.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Mon, 02 Apr 2018 08:47:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/433141.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/433141.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/433141.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/433141.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/433141.html</trackback:ping><description><![CDATA[--使用 from_unixtime 和 unix_timestamp 将时间列转化成想要的格式<br />--然后再Insert表，动态指定分区<br /><br /><div>insert overwrite table partition_user_table partition (dt) select id, account, name, create_time, &nbsp;from_unixtime(unix_timestamp(create_time,'yyyy/mm/dd'),'yyyymmdd') as dt from external_user_table;</div><div></div><img src ="http://www.blogjava.net/keweibo/aggbug/433141.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2018-04-02 16:47 <a href="http://www.blogjava.net/keweibo/articles/433141.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hadoop或hbase集群重启失效节点</title><link>http://www.blogjava.net/keweibo/articles/433135.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Fri, 30 Mar 2018 02:44:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/433135.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/433135.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/433135.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/433135.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/433135.html</trackback:ping><description><![CDATA[<span style="color: #454545; font-family: &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">有时候hadoop或hbase集群运行时间久了后，某些节点就会失效，这个时候如果不想重启整个集群（这种情况在很多情况下已经不被允许），这个时候可以单独重启失效节点。</span><div style="margin: 0px; box-sizing: border-box; color: #454545; font-family: &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">HADOOP：<br style="box-sizing: border-box;" /><div style="margin: 0px; box-sizing: border-box;">hadoop中重启单节点的方法和增加新节点其实是一样的。</div><div style="margin: 0px; box-sizing: border-box;"><span style="font-family: Arial, sans-serif, Helvetica, Tahoma;"><strong>重启或添加节点</strong></span></div><div style="margin: 0px; box-sizing: border-box;"><span style="margin: 0px; padding: 0px; box-sizing: border-box; color: #535353; line-height: 19px;"><br />$bin/hadoop-daemon.sh start datanode&nbsp;</span></div><div style="margin: 0px; box-sizing: border-box;"></div><div style="margin: 0px; box-sizing: border-box;"><span style="margin: 0px; padding: 0px; box-sizing: border-box; font-family: Arial, sans-serif, Helvetica, Tahoma; line-height: 18px;">当然，添加的话需要copy配置文件到新节点。重启的话先</span><span style="margin: 0px; padding: 0px; box-sizing: border-box; color: #535353; line-height: 19px;">&nbsp;&nbsp;$bin/hadoop-daemon.sh stop datanode</span></div><span style="margin: 0px; padding: 0px; box-sizing: border-box; color: #535353;"><span style="margin: 0px; padding: 0px; box-sizing: border-box; line-height: 19px;"><br /><strong>重新balancer(可选)</strong></span></span></div><div style="margin: 0px; box-sizing: border-box; color: #454545; font-family: &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;"><span style="margin: 0px; padding: 0px; box-sizing: border-box; color: #535353;"><span style="margin: 0px; padding: 0px; box-sizing: border-box; line-height: 19px;"></span></span><span style="margin: 0px; padding: 0px; box-sizing: border-box; color: #535353; line-height: 19px;">$bin/hadoop balancer</span></div><div style="margin: 0px; box-sizing: border-box; color: #454545; font-family: &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;"><span style="margin: 0px; padding: 0px; box-sizing: border-box; color: #535353; line-height: 19px;">其实集群自己会balancer，当然也可以像上面那样手动balancer，不然在繁忙时段最好避免。</span></div><div style="margin: 0px; box-sizing: border-box; color: #454545; font-family: &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;"><span style="margin: 0px; padding: 0px; box-sizing: border-box; color: #535353; line-height: 19px;"><br style="box-sizing: border-box;" /></span></div><div style="margin: 0px; box-sizing: border-box; color: #454545; font-family: &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;"><span style="margin: 0px; padding: 0px; box-sizing: border-box; color: #535353; line-height: 19px;"><strong>HBASE：</strong></span></div><div style="margin: 0px; box-sizing: border-box; color: #454545; font-family: &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;"><span style="color: #535353;">重启</span></div><div style="margin: 0px; box-sizing: border-box; color: #454545; font-family: &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;"><span style="margin: 0px; padding: 0px; box-sizing: border-box; color: #535353; line-height: 19px;">$bin/hbase-daemon.sh stop regionserver</span></div><div style="margin: 0px; box-sizing: border-box; color: #454545; font-family: &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;"><span style="margin: 0px; padding: 0px; box-sizing: border-box; color: #535353; line-height: 19px;">$bin/hbase-daemon.sh start regionserver<br /><br /></span></div><div style="margin: 0px; box-sizing: border-box; color: #454545; font-family: &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;"><span style="margin: 0px; padding: 0px; box-sizing: border-box; color: #535353; line-height: 19px;">也可以添加新的master（默认只有一个master），<br />$bin/hbase-daemon.sh start master</span></div><img src ="http://www.blogjava.net/keweibo/aggbug/433135.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2018-03-30 10:44 <a href="http://www.blogjava.net/keweibo/articles/433135.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>windows下使用IDEA开发 spark SQL例子报IllegalArgumentException: java.net.URISyntaxException: Relative path in absolute URI</title><link>http://www.blogjava.net/keweibo/articles/433116.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Wed, 21 Mar 2018 03:31:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/433116.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/433116.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/433116.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/433116.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/433116.html</trackback:ping><description><![CDATA[<pre style="background-color: #c7edcc; font-family: 宋体; font-size: 10.5pt;"><span style="color:#808080;font-style:italic;"><br /></span><span style="color:#000080;font-weight:bold;">public class </span>FirstSparkSql {<br />    <span style="color:#000080;font-weight:bold;">public static void </span>main(String[] args) {<br /><br /><br />        String masterMode = <span style="color:#008000;font-weight:bold;">"local"</span><span style="color:#cc7832;">;</span><span style="color:#808080;font-style:italic;">//spark://master:7077<br /></span><span style="color:#cc7832;"><br /></span> SparkConf conf = <span style="color:#000080;font-weight:bold;">new </span>SparkConf()<span style="color:#cc7832;">;<br /></span> <span style="color:#808080;font-style:italic;">//conf.set("spark.executor.memory", "1024m");<br /></span> conf.setAppName(<span style="color:#008000;font-weight:bold;">"First Spark SQL"</span>)<span style="color:#cc7832;">;<br /></span> conf.setMaster(masterMode)<span style="color:#cc7832;">;<br /></span><span style="color: red; font-style: italic;">//解决异常：</span><span style="color: red;">IllegalArgumentException: java.net.URISyntaxException: Relative path in absolute URI</span><span style="color:#808080;font-style:italic;"><br /></span><strong><span style="color: red;"> conf.set(</span><span style="color: red;">"spark.sql.warehouse.dir"</span><span style="color: red;">,</span><span style="color: red;">"D:</span><span style="color: red;">\\</span><span style="color: red;">temp_files"</span><span style="color: red;">)</span><span style="color: red;">;</span></strong><span style="color:#cc7832;"><br /></span><span style="color:#cc7832;"><br /></span> JavaSparkContext sc = <span style="color:#000080;font-weight:bold;">new </span>JavaSparkContext(conf)<span style="color:#cc7832;">;<br /></span> <span style="color:#cc7832;"><br /></span> SparkSession spark = SparkSession.<span style="font-style:italic;">builder</span>().config(conf).getOrCreate()<span style="color:#cc7832;">;<br /></span> Dataset&lt;Row&gt; df = spark.read().json(<span style="color:#008000;font-weight:bold;">"hdfs://master:9000/user/spark/input/persons.txt"</span>)<span style="color:#cc7832;">;<br /></span> df.show()<span style="color:#cc7832;">;<br /></span> sc.stop()<span style="color:#cc7832;">;<br /></span> }<br />}<br /></pre><img src ="http://www.blogjava.net/keweibo/aggbug/433116.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2018-03-21 11:31 <a href="http://www.blogjava.net/keweibo/articles/433116.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ORA-54033 要修改的列由某个虚拟表达式使用</title><link>http://www.blogjava.net/keweibo/articles/427353.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Wed, 16 Sep 2015 06:30:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/427353.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/427353.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/427353.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/427353.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/427353.html</trackback:ping><description><![CDATA[<em style="text-transform: none; background-color: rgb(254,254,254); text-indent: 0px; font: 14px/21px 'Helvetica Neue', Helvetica, Tahoma, Arial, STXihei, 'Microsoft YaHei', 微软雅黑, sans-serif; white-space: normal; float: left; letter-spacing: normal; color: rgb(153,153,153); word-spacing: 0px; -webkit-text-stroke-width: 0px">原文</em><span style="text-transform: none; background-color: rgb(254,254,254); text-indent: 0px; display: inline !important; font: 14px/21px 'Helvetica Neue', Helvetica, Tahoma, Arial, STXihei, 'Microsoft YaHei', 微软雅黑, sans-serif; white-space: normal; float: none; letter-spacing: normal; color: rgb(153,153,153); word-spacing: 0px; -webkit-text-stroke-width: 0px">&nbsp;<span class="Apple-converted-space">&nbsp;</span></span><a style="text-transform: none; background-color: rgb(254,254,254); text-indent: 0px; text-overflow: ellipsis; display: inline-block; font: 14px/21px 'Helvetica Neue', Helvetica, Tahoma, Arial, STXihei, 'Microsoft YaHei', 微软雅黑, sans-serif; max-width: 69%; white-space: nowrap; letter-spacing: normal; color: rgb(51,51,51); overflow: hidden; word-spacing: 0px; text-decoration: none; -webkit-text-stroke-width: 0px; transition: 0.25s; -webkit-transition: 0.25s" class="cut cut70" href="http://www.tuicool.com/articles/goto?id=nmQfuyB">http://blogs.oracle.com/sql/entry/ora_54033_and_the_hidden</a><br /><br />
<p style="text-transform: none; background-color: rgb(254,254,254); text-indent: 1em; margin: 0px 0px 0.75em; font: 16px/27px 'Helvetica Neue', Helvetica, Tahoma, Arial, STXihei, 'Microsoft YaHei', 微软雅黑, sans-serif; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px">A colleague recently asked me a question:</p>
<address style="text-transform: none; background-color: rgb(254,254,254); text-indent: 0px; display: block; font: 16px/1.5em 'Helvetica Neue', Helvetica, Tahoma, Arial, STXihei, 'Microsoft YaHei', 微软雅黑, sans-serif; white-space: normal; margin-bottom: 1.5em; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px">
<p style="line-height: 1.7em; text-indent: 1em; margin: 0px 0px 0.75em; font-size: 16px">"I'm modifying the data type of a column. When doing so I get the following error:</p>
<p style="line-height: 1.7em; text-indent: 1em; margin: 0px 0px 0.75em; font-size: 16px">ORA-54033: column to be modified is used in a virtual column expression</p>
<p style="line-height: 1.7em; text-indent: 1em; margin: 0px 0px 0.75em; font-size: 16px">But there's no virtual columns defined on the table! What on earth's going on?!"</p></address>
<p style="text-transform: none; background-color: rgb(254,254,254); text-indent: 1em; margin: 0px 0px 0.75em; font: 16px/27px 'Helvetica Neue', Helvetica, Tahoma, Arial, STXihei, 'Microsoft YaHei', 微软雅黑, sans-serif; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px">This was exceptionally confusing. Looking at the table definition we couldn't see any virtual columns defined:&nbsp;</p><pre style="border-bottom: 1px solid; border-left: 1px solid; padding-bottom: 0.3em; overflow-y: auto; text-transform: none; background-color: rgb(246,246,246); text-indent: 0px; margin: 0px 0px 0.75em; padding-left: 0.3em; padding-right: 0.3em; display: block; font: 12px/1.5em Monaco, Menlo, Consolas, 'Courier New', monospace; word-wrap: break-word; white-space: pre-wrap; letter-spacing: normal; color: rgb(51,51,51); word-break: break-all; border-top: 1px solid; border-right: 1px solid; word-spacing: 0px; padding-top: 0.3em; -webkit-text-stroke-width: 0px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px" class="sql"><span class="operator"><span style="color: rgb(51,51,51); font-weight: bold" class="keyword">create</span> <span style="color: rgb(51,51,51); font-weight: bold" class="keyword">table</span> tab (
  x <span style="color: rgb(51,51,51); font-weight: bold" class="keyword">integer</span>, 
  y <span style="color: rgb(51,51,51); font-weight: bold" class="keyword">date</span>, 
  z varchar2(<span style="color: rgb(0,153,153)" class="number">30</span>)
);</span></pre>
<p style="text-transform: none; background-color: rgb(254,254,254); text-indent: 1em; margin: 0px 0px 0.75em; font: 16px/27px 'Helvetica Neue', Helvetica, Tahoma, Arial, STXihei, 'Microsoft YaHei', 微软雅黑, sans-serif; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px">Sure enough, when we tried to change the data type of y we got the exception:</p><pre style="border-bottom: 1px solid; border-left: 1px solid; padding-bottom: 0.3em; overflow-y: auto; text-transform: none; background-color: rgb(246,246,246); text-indent: 0px; margin: 0px 0px 1.5em; padding-left: 0.3em; padding-right: 0.3em; display: block; font: 12px/1.5em Monaco, Menlo, Consolas, 'Courier New', monospace; word-wrap: break-word; white-space: pre-wrap; letter-spacing: normal; color: rgb(51,51,51); word-break: break-all; border-top: 1px solid; border-right: 1px solid; word-spacing: 0px; padding-top: 0.3em; -webkit-text-stroke-width: 0px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px" class="prettyprint sql"><span class="operator"><span style="color: rgb(51,51,51); font-weight: bold" class="keyword">alter</span> <span style="color: rgb(51,51,51); font-weight: bold" class="keyword">table</span> tab modify (y <span style="color: rgb(51,51,51); font-weight: bold" class="keyword">timestamp</span>);</span>

ORA-54033: column to be modified is used in a virtual column expression</pre>
<p style="text-transform: none; background-color: rgb(254,254,254); text-indent: 1em; margin: 0px 0px 0.75em; font: 16px/27px 'Helvetica Neue', Helvetica, Tahoma, Arial, STXihei, 'Microsoft YaHei', 微软雅黑, sans-serif; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px">How could this be?&nbsp;</p>
<p style="text-transform: none; background-color: rgb(254,254,254); text-indent: 1em; margin: 0px 0px 0.75em; font: 16px/27px 'Helvetica Neue', Helvetica, Tahoma, Arial, STXihei, 'Microsoft YaHei', 微软雅黑, sans-serif; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px">Perhaps there was a column defined that we couldn't see. Querying user_tab_cols revealed something interesting:</p><pre style="border-bottom: 1px solid; border-left: 1px solid; padding-bottom: 0.3em; overflow-y: auto; text-transform: none; background-color: rgb(246,246,246); text-indent: 0px; margin: 0px 0px 1.5em; padding-left: 0.3em; padding-right: 0.3em; display: block; font: 12px/1.5em Monaco, Menlo, Consolas, 'Courier New', monospace; word-wrap: break-word; white-space: pre-wrap; letter-spacing: normal; color: rgb(51,51,51); word-break: break-all; border-top: 1px solid; border-right: 1px solid; word-spacing: 0px; padding-top: 0.3em; -webkit-text-stroke-width: 0px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px" class="prettyprint sql"><span class="operator"><span style="color: rgb(51,51,51); font-weight: bold" class="keyword">select</span> column_name, data_default, hidden_column 
<span style="color: rgb(51,51,51); font-weight: bold" class="keyword">from</span>   user_tab_cols
<span style="color: rgb(51,51,51); font-weight: bold" class="keyword">where</span>  table_name = <span style="color: rgb(221,17,68)" class="string">'TAB'</span>;</span>

COLUMN_NAME <span style="white-space: pre">			</span>DATA_DEFAULT <span style="white-space: pre">			</span>HID
<span style="font-style: italic; color: rgb(153,153,136)" class="comment">------------------------------ <span style="white-space: pre">	</span>-----------------------------   ---</span>
SYS_STUYPW88OE302TFVBNC6$MMQXE<span style="white-space: pre">	</span>SYS_OP_COMBINED_HASH("X","Y")<span style="white-space: pre">	</span>YES
Z<span style="white-space: pre">		</span>                                                NO
Y<span style="white-space: pre">								</span>NO
X<span style="white-space: pre">								</span>NO</pre>
<p style="text-transform: none; background-color: rgb(254,254,254); text-indent: 1em; margin: 0px 0px 0.75em; font: 16px/27px 'Helvetica Neue', Helvetica, Tahoma, Arial, STXihei, 'Microsoft YaHei', 微软雅黑, sans-serif; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px">The SYS_... column isn't in the table DDL! Where does it come from? And what's SYS_OP_COMBINED_HASH all about? Has someone been mucking around with the database?</p>
<div style="text-transform: none; background-color: rgb(254,254,254); text-indent: 0px; font: 16px/27px 'Helvetica Neue', Helvetica, Tahoma, Arial, STXihei, 'Microsoft YaHei', 微软雅黑, sans-serif; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px">
<p style="line-height: 1.7em; text-indent: 1em; margin: 0px 0px 0.75em; font-size: 16px">The SYS_ prefix is a sign that the column is system generated. So something's happened that's caused Oracle to create this on our behalf.</p>
<p style="line-height: 1.7em; text-indent: 1em; margin: 0px 0px 0.75em; font-size: 16px">SYS_OP_COMBINED_HASH is an undocumented feature. The name implies Oracle is merging the arguments together to form a hash.</p>
<p style="line-height: 1.7em; text-indent: 1em; margin: 0px 0px 0.75em; font-size: 16px">Is there a feature where we want to capture information about a group of columns?</p></div>
<div style="text-transform: none; background-color: rgb(254,254,254); text-indent: 0px; font: 16px/27px 'Helvetica Neue', Helvetica, Tahoma, Arial, STXihei, 'Microsoft YaHei', 微软雅黑, sans-serif; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px">
<p style="line-height: 1.7em; text-indent: 1em; margin: 0px 0px 0.75em; font-size: 16px">Indeed there is -extended statistics!This feature enables to Oracle calculate statistics on a group of columns. It uses this information to improve row estimates. This is useful when there's a correlation between the values of two (or more) columns in a table.</p>
<p style="line-height: 1.7em; text-indent: 1em; margin: 0px 0px 0.75em; font-size: 16px">Someone had created extended stats on this table for (x, y).</p></div>
<p style="text-transform: none; background-color: rgb(254,254,254); text-indent: 1em; margin: 0px 0px 0.75em; font: 16px/27px 'Helvetica Neue', Helvetica, Tahoma, Arial, STXihei, 'Microsoft YaHei', 微软雅黑, sans-serif; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px">Now we've identified the problem, how do we get around it?</p>
<p style="text-transform: none; background-color: rgb(254,254,254); text-indent: 1em; margin: 0px 0px 0.75em; font: 16px/27px 'Helvetica Neue', Helvetica, Tahoma, Arial, STXihei, 'Microsoft YaHei', 微软雅黑, sans-serif; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px">Simple: drop and recreate the extended stats:</p><pre style="border-bottom: 1px solid; border-left: 1px solid; padding-bottom: 0.3em; overflow-y: auto; text-transform: none; background-color: rgb(246,246,246); text-indent: 0px; margin: 0px 0px 1.5em; padding-left: 0.3em; padding-right: 0.3em; display: block; font: 12px/1.5em Monaco, Menlo, Consolas, 'Courier New', monospace; word-wrap: break-word; white-space: pre-wrap; letter-spacing: normal; color: rgb(51,51,51); word-break: break-all; border-top: 1px solid; border-right: 1px solid; word-spacing: 0px; padding-top: 0.3em; -webkit-text-stroke-width: 0px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px" class="prettyprint sql">exec dbms_stats.drop_extended_stats(user, 'tab', '(x, y)');

<span class="operator"><span style="color: rgb(51,51,51); font-weight: bold" class="keyword">alter</span> <span style="color: rgb(51,51,51); font-weight: bold" class="keyword">table</span> tab modify (y <span style="color: rgb(51,51,51); font-weight: bold" class="keyword">timestamp</span>);</span>

<span class="operator"><span style="color: rgb(51,51,51); font-weight: bold" class="keyword">select</span> dbms_stats.create_extended_stats(<span style="color: rgb(51,51,51); font-weight: bold" class="keyword">user</span>, <span style="color: rgb(221,17,68)" class="string">'tab'</span>, <span style="color: rgb(221,17,68)" class="string">'(x, y)'</span>)
<span style="color: rgb(51,51,51); font-weight: bold" class="keyword">from</span>   dual;</span>

DBMS_STATS.CREATE_EXTENDED_STATS(USER,'TAB','(X,Y)')                           
<span style="font-style: italic; color: rgb(153,153,136)" class="comment">--------------------------------------------------------------------------------</span>
SYS_STUYPW88OE302TFVBNC6$MMQXE  </pre>
<p style="text-transform: none; background-color: rgb(254,254,254); text-indent: 1em; margin: 0px 0px 0.75em; font: 16px/27px 'Helvetica Neue', Helvetica, Tahoma, Arial, STXihei, 'Microsoft YaHei', 微软雅黑, sans-serif; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px">Success!</p>
<p style="text-transform: none; background-color: rgb(254,254,254); text-indent: 1em; margin: 0px 0px 0.75em; font: 16px/27px 'Helvetica Neue', Helvetica, Tahoma, Arial, STXihei, 'Microsoft YaHei', 微软雅黑, sans-serif; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px">Extended stats are a great way to improve the optimizer's row estimates. If you need to create these, I recommend you also do the following:</p>
<div style="text-transform: none; background-color: rgb(254,254,254); text-indent: 0px; font: 16px/27px 'Helvetica Neue', Helvetica, Tahoma, Arial, STXihei, 'Microsoft YaHei', 微软雅黑, sans-serif; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px">
<ul style="padding-bottom: 0px; line-height: 1.7em; list-style-type: none; margin: 0px 0px 0.75em 25px; padding-left: 0px; padding-right: 0px; font-size: 16px; padding-top: 0px"><li style="line-height: 1.7em; list-style-type: disc; font-size: 16px">Apply the extended stats to all environments</li><li style="line-height: 1.7em; list-style-type: disc; font-size: 16px">Put a comment on the columns explaining what you've done, e.g.&nbsp;</li>
<ul style="padding-bottom: 0px; line-height: 1.7em; list-style-type: none; margin: 0px 0px 0px 25px; padding-left: 0px; padding-right: 0px; font-size: 16px; padding-top: 0px"><li style="line-height: 1.7em; list-style-type: disc; font-size: 16px">comment on column tab.x is 'part of extended stats. To modify data type drop and recreate stats';</li></ul></ul>These actions will help prevent future developers getting stuck tracking down the cause of "missing" virtual columns!</div><img src ="http://www.blogjava.net/keweibo/aggbug/427353.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2015-09-16 14:30 <a href="http://www.blogjava.net/keweibo/articles/427353.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JQuery EasyUI combobox动态添加option(转)</title><link>http://www.blogjava.net/keweibo/articles/418124.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Sat, 20 Sep 2014 07:59:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/418124.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/418124.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/418124.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/418124.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/418124.html</trackback:ping><description><![CDATA[<div style="border-bottom: medium none; border-left: medium none; padding-bottom: 5px; text-transform: none; background-color: rgb(252,250,225); text-indent: 0px; margin: 5px 0px; padding-left: 5px; padding-right: 5px; font: 12px/19px 'Courier New'; white-space: normal; letter-spacing: normal; color: rgb(0,0,0); overflow: auto; border-top: medium none; border-right: medium none; word-spacing: 0px; padding-top: 5px; border-top-left-radius: 5px; border-top-right-radius: 5px; border-bottom-right-radius: 5px; border-bottom-left-radius: 5px; -webkit-text-stroke-width: 0px" class="cnblogs_code"><pre style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: 'Courier New' !important; word-wrap: break-word; white-space: pre-wrap; font-size: 12px !important; padding-top: 0px">&lt;input class="easyui-combobox" id="rwlb" name="rwlb" style="width:435px" data-options="valueField:'id', textField:'text', panelHeight:'auto'" &gt;  </pre></div>
<p style="padding-bottom: 0px; text-transform: none; background-color: rgb(246,228,151); text-indent: 0px; margin: 10px auto; padding-left: 0px; padding-right: 0px; font: 13px/19px 微软雅黑, verdana, 'ms song', 宋体, Arial, Helvetica, sans-serif; white-space: normal; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; padding-top: 0px; -webkit-text-stroke-width: 0px">方法一：</p>
<div style="border-bottom: medium none; border-left: medium none; padding-bottom: 5px; text-transform: none; background-color: rgb(252,250,225); text-indent: 0px; margin: 5px 0px; padding-left: 5px; padding-right: 5px; font: 12px/19px 'Courier New'; white-space: normal; letter-spacing: normal; color: rgb(0,0,0); overflow: auto; border-top: medium none; border-right: medium none; word-spacing: 0px; padding-top: 5px; border-top-left-radius: 5px; border-top-right-radius: 5px; border-bottom-right-radius: 5px; border-bottom-left-radius: 5px; -webkit-text-stroke-width: 0px" class="cnblogs_code"><pre style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: 'Courier New' !important; word-wrap: break-word; white-space: pre-wrap; font-size: 12px !important; padding-top: 0px"><span style="padding-bottom: 0px; line-height: 1.5 !important; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: 'Courier New' !important; color: rgb(0,128,128); font-size: 12px !important; padding-top: 0px">1</span> <span style="padding-bottom: 0px; line-height: 1.5 !important; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: 'Courier New' !important; color: rgb(0,128,128); font-size: 12px !important; padding-top: 0px">var data, json;
</span><span style="padding-bottom: 0px; line-height: 1.5 !important; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: 'Courier New' !important; color: rgb(0,128,128); font-size: 12px !important; padding-top: 0px">2</span> <span style="padding-bottom: 0px; line-height: 1.5 !important; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: 'Courier New' !important; color: rgb(0,128,128); font-size: 12px !important; padding-top: 0px">json = '[{"id":"年计划","text":"年计划","selected":true}]';
</span><span style="padding-bottom: 0px; line-height: 1.5 !important; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: 'Courier New' !important; color: rgb(0,128,128); font-size: 12px !important; padding-top: 0px">3</span> <span style="padding-bottom: 0px; line-height: 1.5 !important; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: 'Courier New' !important; color: rgb(0,128,128); font-size: 12px !important; padding-top: 0px">data = $.parseJSON(json);
</span><span style="padding-bottom: 0px; line-height: 1.5 !important; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: 'Courier New' !important; color: rgb(0,128,128); font-size: 12px !important; padding-top: 0px">4</span> <span style="padding-bottom: 0px; line-height: 1.5 !important; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: 'Courier New' !important; color: rgb(0,128,128); font-size: 12px !important; padding-top: 0px">$("#rwlb").combobox("loadData", data);</span><span style="padding-bottom: 0px; line-height: 1.5 !important; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: 'Courier New' !important; color: rgb(0,128,128); font-size: 12px !important; padding-top: 0px"><br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" /></span></pre></div>
<p style="padding-bottom: 0px; text-transform: none; background-color: rgb(246,228,151); text-indent: 0px; margin: 10px auto; padding-left: 0px; padding-right: 0px; font: 13px/19px 微软雅黑, verdana, 'ms song', 宋体, Arial, Helvetica, sans-serif; white-space: normal; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; padding-top: 0px; -webkit-text-stroke-width: 0px">方法二：</p>
<div style="border-bottom: medium none; border-left: medium none; padding-bottom: 5px; text-transform: none; background-color: rgb(252,250,225); text-indent: 0px; margin: 5px 0px; padding-left: 5px; padding-right: 5px; font: 12px/19px 'Courier New'; white-space: normal; letter-spacing: normal; color: rgb(0,0,0); overflow: auto; border-top: medium none; border-right: medium none; word-spacing: 0px; padding-top: 5px; border-top-left-radius: 5px; border-top-right-radius: 5px; border-bottom-right-radius: 5px; border-bottom-left-radius: 5px; -webkit-text-stroke-width: 0px" class="cnblogs_code"><pre style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: 'Courier New' !important; word-wrap: break-word; white-space: pre-wrap; font-size: 12px !important; padding-top: 0px"><span style="padding-bottom: 0px; line-height: 1.5 !important; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: 'Courier New' !important; color: rgb(0,128,128); font-size: 12px !important; padding-top: 0px">1</span> <span style="padding-bottom: 0px; line-height: 1.5 !important; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: 'Courier New' !important; color: rgb(0,0,0); font-size: 12px !important; padding-top: 0px">var data,json;
</span><span style="padding-bottom: 0px; line-height: 1.5 !important; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: 'Courier New' !important; color: rgb(0,128,128); font-size: 12px !important; padding-top: 0px">2</span> <span style="padding-bottom: 0px; line-height: 1.5 !important; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: 'Courier New' !important; color: rgb(0,0,0); font-size: 12px !important; padding-top: 0px">data = [];
</span><span style="padding-bottom: 0px; line-height: 1.5 !important; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: 'Courier New' !important; color: rgb(0,128,128); font-size: 12px !important; padding-top: 0px">3</span> <span style="padding-bottom: 0px; line-height: 1.5 !important; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: 'Courier New' !important; color: rgb(0,0,0); font-size: 12px !important; padding-top: 0px">data.push({ "text": "测试", "id": 100 });
</span><span style="padding-bottom: 0px; line-height: 1.5 !important; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: 'Courier New' !important; color: rgb(0,128,128); font-size: 12px !important; padding-top: 0px">4</span> $("#rwlb").combobox("loadData", data);</pre></div>转自：<a href="http://www.cnblogs.com/easypass/archive/2012/12/29/2838329.html">http://www.cnblogs.com/easypass/archive/2012/12/29/2838329.html</a><img src ="http://www.blogjava.net/keweibo/aggbug/418124.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2014-09-20 15:59 <a href="http://www.blogjava.net/keweibo/articles/418124.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>转：Easyui Tree方法扩展 - getLevel(获取节点级别)</title><link>http://www.blogjava.net/keweibo/articles/417899.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Sat, 13 Sep 2014 08:12:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/417899.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/417899.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/417899.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/417899.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/417899.html</trackback:ping><description><![CDATA[原文：<a href="http://www.jeasyuicn.com/the-extended---easyui-tree-method-getlevel-access-node-level.html">http://www.jeasyuicn.com/the-extended---easyui-tree-method-getlevel-access-node-level.html</a><br /><br /><br />
<p>Easyui Tree一直就没有提供这个方法,以前没有用到,所以一直没怎么在意,这次自己用到了,顺便扩展了一个方法,分享给大家. </p>
<div id="highlighter_745118" class="syntaxhighlighter  jscript">
<div class="lines">
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>1</code></td>
<td class="content"><code class="jscript plain">$.extend($.fn.tree.methods, { </code></td></tr></tbody></table></div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>2</code></td>
<td class="content"><code class="spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jscript plain">getLevel:</code><code class="jscript keyword">function</code><code class="jscript plain">(jq,target){ </code></td></tr></tbody></table></div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>3</code></td>
<td class="content"><code class="spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jscript keyword">var</code> <code class="jscript plain">l = $(target).parentsUntil(</code><code class="jscript string">"ul.tree"</code><code class="jscript plain">,</code><code class="jscript string">"ul"</code><code class="jscript plain">); </code></td></tr></tbody></table></div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>4</code></td>
<td class="content"><code class="spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jscript keyword">return</code> <code class="jscript plain">l.length+1; </code></td></tr></tbody></table></div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>5</code></td>
<td class="content"><code class="spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jscript plain">} </code></td></tr></tbody></table></div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>6</code></td>
<td class="content"><code class="jscript plain">});</code></td></tr></tbody></table></div></div></div>用法: 
<div id="highlighter_194124" class="syntaxhighlighter  jscript">
<div class="lines">
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>1</code></td>
<td class="content"><code class="jscript keyword">var</code> <code class="jscript plain">node = $().tree(</code><code class="jscript string">"getSelected"</code><code class="jscript plain">); </code></td></tr></tbody></table></div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>2</code></td>
<td class="content"><code class="jscript keyword">var</code> <code class="jscript plain">lv =&nbsp; $().tree(</code><code class="jscript string">"getLevel"</code><code class="jscript plain">,node.target);</code></td></tr></tbody></table></div></div></div><img src ="http://www.blogjava.net/keweibo/aggbug/417899.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2014-09-13 16:12 <a href="http://www.blogjava.net/keweibo/articles/417899.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle 十进制与十六进制的转换</title><link>http://www.blogjava.net/keweibo/articles/416374.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Wed, 30 Jul 2014 09:35:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/416374.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/416374.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/416374.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/416374.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/416374.html</trackback:ping><description><![CDATA[<p style="widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; margin: 10px auto; font: 13px/20px georgia, verdana, Arial, helvetica, sans-seriff; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(75,75,75); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">十进制与十六进制的转换<br />8i以上版本：</p>
<p style="widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; margin: 10px auto; font: 13px/20px georgia, verdana, Arial, helvetica, sans-seriff; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(75,75,75); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">十进制--&gt;十六进制&nbsp;<br />select to_char(100,'XX') from dual;</p>
<p style="widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; margin: 10px auto; font: 13px/20px georgia, verdana, Arial, helvetica, sans-seriff; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(75,75,75); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">十六进制--&gt;十进制<br />select to_number('7D','XX') from dual;</p><br /><span style="color: red">其中XX为格式，注意XX的位数不能小于</span>传入的参数。<br /><img src ="http://www.blogjava.net/keweibo/aggbug/416374.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2014-07-30 17:35 <a href="http://www.blogjava.net/keweibo/articles/416374.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JavaScript中实现函数重载和参数默认值(转)</title><link>http://www.blogjava.net/keweibo/articles/416152.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Thu, 24 Jul 2014 01:22:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/416152.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/416152.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/416152.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/416152.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/416152.html</trackback:ping><description><![CDATA[<div>转自：<a href="http://www.2cto.com/kf/201208/149413.html">http://www.2cto.com/kf/201208/149413.html</a><br /><br />
<p style="padding-bottom: 0px; border-right-width: 0px; widows: 2; text-transform: none; background-color: rgb(255,255,255); list-style-type: none; text-indent: 2em; margin: 0px 0px 8px; padding-left: 0px; padding-right: 0px; font: 14px/28px 宋体; white-space: normal; orphans: 2; border-top-width: 0px; border-bottom-width: 0px; letter-spacing: normal; color: rgb(51,51,51); border-left-width: 0px; word-spacing: 0px; padding-top: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">参数默认值是指在调用函数时，若省略了某个实参，函数会自动为该参数分配一个默认值，使得函数调用的方便性和灵活性大大提高。</p>
<p style="padding-bottom: 0px; border-right-width: 0px; widows: 2; text-transform: none; background-color: rgb(255,255,255); list-style-type: none; text-indent: 2em; margin: 0px 0px 8px; padding-left: 0px; padding-right: 0px; font: 14px/28px 宋体; white-space: normal; orphans: 2; border-top-width: 0px; border-bottom-width: 0px; letter-spacing: normal; color: rgb(51,51,51); border-left-width: 0px; word-spacing: 0px; padding-top: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">举个例子，比如<a style="color: rgb(51,51,51); font-size: 14px; text-decoration: none" class="keylink" href="http://www.2cto.com/kf/web/php/" target="_blank">PHP</a>中的字符串截取函数substr(string,start,length)，当不指定length时，函数将默认截取字符串中start位置到字符串结束，而如果指定了length，则截取从start位置开始的以length为长度的字符串，所以如果调用的是substr('http://www.hualai.net.cn',11,6)，则返回的是hualai；如果省略掉最后一个参数，substr('http://www.hualai.net.cn',11)，则返回hualai.net.cn。</p>
<p style="padding-bottom: 0px; border-right-width: 0px; widows: 2; text-transform: none; background-color: rgb(255,255,255); list-style-type: none; text-indent: 2em; margin: 0px 0px 8px; padding-left: 0px; padding-right: 0px; font: 14px/28px 宋体; white-space: normal; orphans: 2; border-top-width: 0px; border-bottom-width: 0px; letter-spacing: normal; color: rgb(51,51,51); border-left-width: 0px; word-spacing: 0px; padding-top: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">再比如jQuery框架中，$(selector).html()方法是获取该元素内的HTML代码，而$(selector).html(content)则是设置该元素内的HTML。我们知道，在C语言中，我们可以通过如下形式来为函数参数设置默认值：</p>
<p style="padding-bottom: 0px; border-right-width: 0px; widows: 2; text-transform: none; background-color: rgb(255,255,255); list-style-type: none; text-indent: 2em; margin: 0px 0px 8px; padding-left: 0px; padding-right: 0px; font: 14px/28px 宋体; white-space: normal; orphans: 2; border-top-width: 0px; border-bottom-width: 0px; letter-spacing: normal; color: rgb(51,51,51); border-left-width: 0px; word-spacing: 0px; padding-top: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">[cpp]&nbsp;<br />void foo(int a, int b = 1, bool c = false);&nbsp;&nbsp;&nbsp;<br />在<a style="color: rgb(51,51,51); font-size: 14px; text-decoration: none" class="keylink" href="http://www.2cto.com/kf/ware/Java/" target="_blank">Java</a>中，则可以通过函数重载来设置函数参数默认值：</p>
<p style="padding-bottom: 0px; border-right-width: 0px; widows: 2; text-transform: none; background-color: rgb(255,255,255); list-style-type: none; text-indent: 2em; margin: 0px 0px 8px; padding-left: 0px; padding-right: 0px; font: 14px/28px 宋体; white-space: normal; orphans: 2; border-top-width: 0px; border-bottom-width: 0px; letter-spacing: normal; color: rgb(51,51,51); border-left-width: 0px; word-spacing: 0px; padding-top: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">[java]<br />public void foo(int a){&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp; foo(a, 1);&nbsp;&nbsp;&nbsp;<br />}&nbsp;&nbsp;&nbsp;<br />public void foo(int a, int b){&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp; foo(a, b, false);&nbsp;&nbsp;&nbsp;<br />}&nbsp;&nbsp;&nbsp;<br />public void foo(int a, int b, bool c){&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp; //函数内容&nbsp;&nbsp;&nbsp;<br />}&nbsp;&nbsp;&nbsp;<br />而在<a style="color: rgb(51,51,51); font-size: 14px; text-decoration: none" class="keylink" href="http://www.2cto.com/kf/qianduan/JS/" target="_blank">JavaScript</a>中，如何像jQuery那样设置函数参数默认值呢？JavaScript中并没有像C语言中定义函数时直接在参数后面赋值的方法，也没有像Java里那样的函数重载，但我们可以通过JavaScript方法中的一个arguments只读变量数组来实现，具体如下：</p>
<p style="padding-bottom: 0px; border-right-width: 0px; widows: 2; text-transform: none; background-color: rgb(255,255,255); list-style-type: none; text-indent: 2em; margin: 0px 0px 8px; padding-left: 0px; padding-right: 0px; font: 14px/28px 宋体; white-space: normal; orphans: 2; border-top-width: 0px; border-bottom-width: 0px; letter-spacing: normal; color: rgb(51,51,51); border-left-width: 0px; word-spacing: 0px; padding-top: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">[js]&nbsp;<br />function foo(){&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp; var a = arguments[0] ? arguments[0] : 1;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp; var b = arguments[1] ? arguments[1] : false;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp; //函数内容&nbsp;&nbsp;&nbsp;<br />}&nbsp;&nbsp;&nbsp;<br />以上是通过判断参数是否存在，若不存在则将默认值附给变量，而我们可以通过判断参数的类型来实现重载：</p>
<p style="padding-bottom: 0px; border-right-width: 0px; widows: 2; text-transform: none; background-color: rgb(255,255,255); list-style-type: none; text-indent: 2em; margin: 0px 0px 8px; padding-left: 0px; padding-right: 0px; font: 14px/28px 宋体; white-space: normal; orphans: 2; border-top-width: 0px; border-bottom-width: 0px; letter-spacing: normal; color: rgb(51,51,51); border-left-width: 0px; word-spacing: 0px; padding-top: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">[js]&nbsp;<br />function foo(){&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp; if(typeof arguments[0] == 'string')&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert('参数类型为字符串');&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp; else if(typeof arguments[0] == 'number')&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert('参数类型为数值');&nbsp;&nbsp;&nbsp;&nbsp;<br />}&nbsp;&nbsp;&nbsp;<br />或者：</p>
<p style="padding-bottom: 0px; border-right-width: 0px; widows: 2; text-transform: none; background-color: rgb(255,255,255); list-style-type: none; text-indent: 2em; margin: 0px 0px 8px; padding-left: 0px; padding-right: 0px; font: 14px/28px 宋体; white-space: normal; orphans: 2; border-top-width: 0px; border-bottom-width: 0px; letter-spacing: normal; color: rgb(51,51,51); border-left-width: 0px; word-spacing: 0px; padding-top: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">[js]&nbsp;<br />function foo(){&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp; if(arguments[0].constructor == String)&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert('参数类型为字符串');&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp; else if(arguments[0].constructor == Number)&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert('参数类型为数值');&nbsp;&nbsp;&nbsp;&nbsp;<br />}&nbsp;&nbsp;&nbsp;</p></div><img src ="http://www.blogjava.net/keweibo/aggbug/416152.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2014-07-24 09:22 <a href="http://www.blogjava.net/keweibo/articles/416152.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SQL Server 2005中的CTE递归查询得到一棵树 (转)</title><link>http://www.blogjava.net/keweibo/articles/415936.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Thu, 17 Jul 2014 06:46:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/415936.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/415936.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/415936.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/415936.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/415936.html</trackback:ping><description><![CDATA[原文:<a href="http://blog.csdn.net/bin_520_yan/article/details/5998349">http://blog.csdn.net/bin_520_yan/article/details/5998349</a><br /><br />
<p style="text-align: left">感觉这个CTE递归查询蛮好用的，先举个例子：</p>
<p style="text-align: left">&nbsp;</p>
<div class="dp-highlighter bg_c-sharp">
<div class="bar">
<div class="tools"><strong>[c-sharp]</strong> <a class="ViewSource" title="view plain" onclick="dp.sh.Toolbar.Command('ViewSource',this);return false;" href="http://blog.csdn.net/bin_520_yan/article/details/5998349#"><u><font color="#0000ff">view plain</font></u></a><a class="CopyToClipboard" title="copy" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;" href="http://blog.csdn.net/bin_520_yan/article/details/5998349#"><u><font color="#0000ff">copy</font></u></a><a class="PrintSource" title="print" onclick="dp.sh.Toolbar.Command('PrintSource',this);return false;" href="http://blog.csdn.net/bin_520_yan/article/details/5998349#"><u><font color="#0000ff">print</font></u></a><a class="About" title="?" onclick="dp.sh.Toolbar.Command('About',this);return false;" href="http://blog.csdn.net/bin_520_yan/article/details/5998349#"><u><font color="#0000ff">?</font></u></a> 
<div style="z-index: 99; position: absolute; width: 23px; height: 12px; top: 499px; left: 447px"><u><font color="#0000ff"><embed id="ZeroClipboardMovie_1" height="12" name="ZeroClipboardMovie_1" type="application/x-shockwave-flash" align="center" pluginspage="http://www.macromedia.com/go/getflashplayer" width="23" src="http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" allowscriptaccess="always" allowfullscreen="false" flashvars="id=1&amp;width=23&amp;height=12" wmode="transparent"></font></u></div></div></div>
<ol class="dp-c"><li class="alt"><span>use&nbsp;City;&nbsp;&nbsp;</span></li><li><span>go&nbsp;&nbsp;</span></li><li class="alt"><span>create&nbsp;table&nbsp;Tree&nbsp;&nbsp;</span></li><li><span>(&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;ID&nbsp;<span class="keyword">int</span><span>&nbsp;identity(1,1)&nbsp;primary&nbsp;key&nbsp;not&nbsp;</span><span class="keyword">null</span><span>,&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;Name&nbsp;varchar(20)&nbsp;not&nbsp;<span class="keyword">null</span><span>,&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;Parent&nbsp;varchar(20)&nbsp;<span class="keyword">null</span><span>&nbsp;&nbsp;</span></span></li><li><span>)&nbsp;&nbsp;</span></li><li class="alt"><span>go&nbsp;&nbsp;</span></li><li><span>insert&nbsp;Tree&nbsp;values(<span class="string">'大学'</span><span>,</span><span class="keyword">null</span><span>)&nbsp;&nbsp;</span></span></li><li class="alt"><span>insert&nbsp;Tree&nbsp;values(<span class="string">'学院'</span><span>,</span><span class="string">'大学'</span><span>)&nbsp;&nbsp;</span></span></li><li><span>insert&nbsp;Tree&nbsp;values(<span class="string">'计算机学院'</span><span>,</span><span class="string">'学院'</span><span>)&nbsp;&nbsp;</span></span></li><li class="alt"><span>insert&nbsp;Tree&nbsp;values(<span class="string">'网络工程'</span><span>,</span><span class="string">'计算机学院'</span><span>)&nbsp;&nbsp;</span></span></li><li><span>insert&nbsp;Tree&nbsp;values(<span class="string">'信息管理'</span><span>,</span><span class="string">'计算机学院'</span><span>)&nbsp;&nbsp;</span></span></li><li class="alt"><span>insert&nbsp;Tree&nbsp;values(<span class="string">'电信学院'</span><span>,</span><span class="string">'学院'</span><span>)&nbsp;&nbsp;</span></span></li><li><span>insert&nbsp;Tree&nbsp;values(<span class="string">'教务处'</span><span>,</span><span class="string">'大学'</span><span>)&nbsp;&nbsp;</span></span></li><li class="alt"><span>insert&nbsp;Tree&nbsp;values(<span class="string">'材料科'</span><span>,</span><span class="string">'教务处'</span><span>)&nbsp;&nbsp;</span></span></li><li><span>insert&nbsp;Tree&nbsp;values(<span class="string">'招生办'</span><span>,</span><span class="string">'大学'</span><span>)&nbsp;&nbsp;</span></span></li><li class="alt"><span>go&nbsp;&nbsp;</span></li><li><span>with&nbsp;CTE&nbsp;<span class="keyword">as</span><span>&nbsp;&nbsp;</span></span></li><li class="alt"><span>(&nbsp;&nbsp;</span></li><li><span>--&gt;Begin&nbsp;一个定位点成员&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;select&nbsp;ID,&nbsp;Name,Parent,cast(Name&nbsp;<span class="keyword">as</span><span>&nbsp;nvarchar(max))&nbsp;</span><span class="keyword">as</span><span>&nbsp;TE,0&nbsp;</span><span class="keyword">as</span><span>&nbsp;Levle&nbsp;from&nbsp;Tree&nbsp;where&nbsp;Parent&nbsp;</span><span class="keyword">is</span><span>&nbsp;</span><span class="keyword">null</span><span>&nbsp;&nbsp;</span></span></li><li><span>--&gt;End&nbsp;&nbsp;&nbsp;</span></li><li class="alt"><span>union&nbsp;all&nbsp;&nbsp;</span></li><li><span>--&gt;Begin一个递归成员&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;select&nbsp;Tree.ID,&nbsp;Tree.Name,Tree.Parent,cast(replicate(<span class="string">'&nbsp;'</span><span>,len(CTE.TE))+</span><span class="string">'|_'</span><span>+Tree.name&nbsp;</span><span class="keyword">as</span><span>&nbsp;nvarchar(MAX))&nbsp;</span><span class="keyword">as</span><span>&nbsp;TE,Levle+1&nbsp;</span><span class="keyword">as</span><span>&nbsp;Levle&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;from&nbsp;Tree&nbsp;inner&nbsp;join&nbsp;CTE&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;on&nbsp;Tree.Parent=CTE.Name&nbsp;&nbsp;</span></li><li><span>--&gt;End&nbsp;&nbsp;</span></li><li class="alt"><span>)&nbsp;&nbsp;</span></li><li><span>select&nbsp;*&nbsp;from&nbsp;CTE&nbsp;order&nbsp;by&nbsp;ID&nbsp;&nbsp;</span></li><li class="alt"><span>--1.将&nbsp;CTE&nbsp;表达式拆分为定位点成员和递归成员。&nbsp;&nbsp;</span></li><li><span>--2.运行定位点成员，创建第一个调用或基准结果集&nbsp;(T0)。&nbsp;&nbsp;</span></li><li class="alt"><span>--3.运行递归成员，将&nbsp;Ti&nbsp;作为输入(这里只有一条记录)，将&nbsp;Ti+1&nbsp;作为输出。&nbsp;&nbsp;</span></li><li><span>--4.重复步骤&nbsp;3，直到返回空集。&nbsp;&nbsp;</span></li><li class="alt"><span>--5.返回结果集。这是对&nbsp;T0&nbsp;到&nbsp;Tn&nbsp;执行&nbsp;UNION&nbsp;ALL&nbsp;的结果。&nbsp;&nbsp;</span></li></ol></div>
<p>&nbsp;</p>
<p style="text-align: left">上面的SQL语句再次插入一条数据：</p>
<p style="text-align: left">insert Tree values('网络1班','网络工程')</p>
<p style="text-align: left">&nbsp;&nbsp;&nbsp;&nbsp; 运行结果如下图：</p>
<p style="text-align: center"><img alt="" src="http://hi.csdn.net/attachment/201011/10/0_1289396897R7x7.gif" /></p>
<p style="text-align: center">图1 运行结果</p>
<p style="text-align: left">&nbsp;&nbsp;&nbsp; &nbsp;注意点：貌似在递归成员处所选择的字段都必须Tree表的数据，而不能是CTE结果集中的除了Tree中没有而CTE中有的字段在这里才可以引用，比如字段TE。</p>
<p style="text-align: left">&nbsp;&nbsp;&nbsp;&nbsp;首先看下，遍历的第1条记录的SQL语句：</p>
<div class="dp-highlighter bg_c-sharp">
<div class="bar">
<div class="tools"><strong>[c-sharp]</strong> <a class="ViewSource" title="view plain" onclick="dp.sh.Toolbar.Command('ViewSource',this);return false;" href="http://blog.csdn.net/bin_520_yan/article/details/5998349#"><u><font color="#0000ff">view plain</font></u></a><a class="CopyToClipboard" title="copy" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;" href="http://blog.csdn.net/bin_520_yan/article/details/5998349#"><u><font color="#0000ff">copy</font></u></a><a class="PrintSource" title="print" onclick="dp.sh.Toolbar.Command('PrintSource',this);return false;" href="http://blog.csdn.net/bin_520_yan/article/details/5998349#"><u><font color="#0000ff">print</font></u></a><a class="About" title="?" onclick="dp.sh.Toolbar.Command('About',this);return false;" href="http://blog.csdn.net/bin_520_yan/article/details/5998349#"><u><font color="#0000ff">?</font></u></a> 
<div style="z-index: 99; position: absolute; width: 23px; height: 12px; top: 1718px; left: 447px"><u><font color="#0000ff"><embed id="ZeroClipboardMovie_2" height="12" name="ZeroClipboardMovie_2" type="application/x-shockwave-flash" align="center" pluginspage="http://www.macromedia.com/go/getflashplayer" width="23" src="http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" allowscriptaccess="always" allowfullscreen="false" flashvars="id=2&amp;width=23&amp;height=12" wmode="transparent"></font></u></div></div></div>
<ol class="dp-c"><li class="alt"><span>select&nbsp;ID,&nbsp;Name,Parent,cast(Name&nbsp;</span><span class="keyword">as</span><span>&nbsp;nvarchar(max))&nbsp;</span><span class="keyword">as</span><span>&nbsp;TE,0&nbsp;</span><span class="keyword">as</span><span>&nbsp;Levle&nbsp;from&nbsp;Tree&nbsp;where&nbsp;Parent&nbsp;</span><span class="keyword">is</span><span>&nbsp;</span><span class="keyword">null</span><span>&nbsp;&nbsp;</span></li></ol></div>
<p>&nbsp;</p>
<p style="text-align: left">&nbsp;&nbsp;&nbsp;获取的结果为：</p>
<p style="text-align: left">&nbsp;&nbsp; Name&nbsp; Parent&nbsp;&nbsp; TE&nbsp;&nbsp;&nbsp; Levle</p>
<p style="text-align: left">-------------------------------------</p>
<p style="text-align: left">&nbsp;&nbsp;&nbsp;&nbsp; 大学&nbsp;&nbsp;&nbsp;&nbsp;NULL&nbsp;&nbsp; 大学&nbsp;&nbsp;&nbsp;&nbsp; 0</p>
<p style="text-align: left">&nbsp;&nbsp; 递归第2次所获取的结果集合的类SQL语句为：</p>
<p style="text-align: left"></p>
<div class="dp-highlighter bg_c-sharp">
<div class="bar">
<div class="tools"><strong>[c-sharp]</strong> <a class="ViewSource" title="view plain" onclick="dp.sh.Toolbar.Command('ViewSource',this);return false;" href="http://blog.csdn.net/bin_520_yan/article/details/5998349#"><u><font color="#0000ff">view plain</font></u></a><a class="CopyToClipboard" title="copy" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;" href="http://blog.csdn.net/bin_520_yan/article/details/5998349#"><u><font color="#0000ff">copy</font></u></a><a class="PrintSource" title="print" onclick="dp.sh.Toolbar.Command('PrintSource',this);return false;" href="http://blog.csdn.net/bin_520_yan/article/details/5998349#"><u><font color="#0000ff">print</font></u></a><a class="About" title="?" onclick="dp.sh.Toolbar.Command('About',this);return false;" href="http://blog.csdn.net/bin_520_yan/article/details/5998349#"><u><font color="#0000ff">?</font></u></a> 
<div style="z-index: 99; position: absolute; width: 23px; height: 12px; top: 1999px; left: 447px"><u><font color="#0000ff"><embed id="ZeroClipboardMovie_3" height="12" name="ZeroClipboardMovie_3" type="application/x-shockwave-flash" align="center" pluginspage="http://www.macromedia.com/go/getflashplayer" width="23" src="http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" allowscriptaccess="always" allowfullscreen="false" flashvars="id=3&amp;width=23&amp;height=12" wmode="transparent"></font></u></div></div></div>
<ol class="dp-c"><li class="alt"><span>select&nbsp;Tree.ID,&nbsp;Tree.Name,Tree.Parent,cast(replicate(</span><span class="string">'&nbsp;'</span><span>,len(CTE.TE))+</span><span class="string">'|_'</span><span>+Tree.name&nbsp;</span><span class="keyword">as</span><span>&nbsp;nvarchar(MAX))&nbsp;</span><span class="keyword">as</span><span>&nbsp;TE,Levle+1&nbsp;</span><span class="keyword">as</span><span>&nbsp;Levle&nbsp;&nbsp;</span></li><li><span>from&nbsp;Tree&nbsp;inner&nbsp;join&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;(select&nbsp;ID,&nbsp;Name,Parent,cast(Name&nbsp;<span class="keyword">as</span><span>&nbsp;nvarchar(max))&nbsp;</span><span class="keyword">as</span><span>&nbsp;TE,0&nbsp;</span><span class="keyword">as</span><span>&nbsp;Levle&nbsp;from&nbsp;Tree&nbsp;where&nbsp;Parent&nbsp;</span><span class="keyword">is</span><span>&nbsp;</span><span class="keyword">null</span><span>)&nbsp;&nbsp;</span></span></li><li><span class="keyword">as</span><span>&nbsp;CTE&nbsp;&nbsp;</span></li><li class="alt"><span>on&nbsp;Tree.Parent=CTE.Name&nbsp;&nbsp;</span></li></ol></div>
<p>&nbsp;</p>
<p style="text-align: left">&nbsp;&nbsp; 上面的CTE子查询的结果就是第一次递归查询的结果集，上面SQL运行结果为：</p>
<p style="text-align: left"><img alt="" src="http://hi.csdn.net/attachment/201011/10/0_1289397808S2H0.gif" /></p>
<p style="text-align: left">&nbsp;&nbsp; 同样的，将第二次递归查询的上面三条记录作为第三次查询的&#8216;定位成员&#8217;：</p>
<p style="text-align: left">&nbsp; 【这里要注意，上面的三条记录是从最后一条开始依次作为第三次递归的输入的，即第一条是ID=9的记录，接下来是7和2，关于第四次递归也类似】</p>
<p style="text-align: left">&nbsp;&nbsp; 第三次递归类SQL语句</p>
<p style="text-align: left"></p>
<div class="dp-highlighter bg_c-sharp">
<div class="bar">
<div class="tools"><strong>[c-sharp]</strong> <a class="ViewSource" title="view plain" onclick="dp.sh.Toolbar.Command('ViewSource',this);return false;" href="http://blog.csdn.net/bin_520_yan/article/details/5998349#"><u><font color="#0000ff">view plain</font></u></a><a class="CopyToClipboard" title="copy" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;" href="http://blog.csdn.net/bin_520_yan/article/details/5998349#"><u><font color="#0000ff">copy</font></u></a><a class="PrintSource" title="print" onclick="dp.sh.Toolbar.Command('PrintSource',this);return false;" href="http://blog.csdn.net/bin_520_yan/article/details/5998349#"><u><font color="#0000ff">print</font></u></a><a class="About" title="?" onclick="dp.sh.Toolbar.Command('About',this);return false;" href="http://blog.csdn.net/bin_520_yan/article/details/5998349#"><u><font color="#0000ff">?</font></u></a> 
<div style="z-index: 99; position: absolute; width: 23px; height: 12px; top: 2429px; left: 447px"><u><font color="#0000ff"><embed id="ZeroClipboardMovie_4" height="12" name="ZeroClipboardMovie_4" type="application/x-shockwave-flash" align="center" pluginspage="http://www.macromedia.com/go/getflashplayer" width="23" src="http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" allowscriptaccess="always" allowfullscreen="false" flashvars="id=4&amp;width=23&amp;height=12" wmode="transparent"></font></u></div></div></div>
<ol class="dp-c"><li class="alt"><span>select&nbsp;Tree.ID,&nbsp;Tree.Name,Tree.Parent,cast(replicate(</span><span class="string">'&nbsp;'</span><span>,len(CTE.TE))+</span><span class="string">'|_'</span><span>+Tree.name&nbsp;</span><span class="keyword">as</span><span>&nbsp;nvarchar(MAX))&nbsp;</span><span class="keyword">as</span><span>&nbsp;TE,Levle+1&nbsp;</span><span class="keyword">as</span><span>&nbsp;Levle&nbsp;&nbsp;</span></li><li><span>from&nbsp;Tree&nbsp;inner&nbsp;join&nbsp;&nbsp;</span></li><li class="alt"><span>(第二次递归查询的SQL语句)<span class="keyword">as</span><span>&nbsp;CTE&nbsp;&nbsp;</span></span></li><li><span>on&nbsp;Tree.Parent=CTE.Name&nbsp;&nbsp;</span></li></ol></div>
<p>&nbsp;</p>
<p style="text-align: left">&nbsp;&nbsp; 结果如下：</p>
<p style="text-align: left"><img alt="" src="http://hi.csdn.net/attachment/201011/10/0_1289398104CkJ5.gif" /></p>
<p style="text-align: left">其实每次递归的类SQL可为如下所示：</p>
<p style="text-align: left"></p>
<div class="dp-highlighter bg_c-sharp">
<div class="bar">
<div class="tools"><strong>[c-sharp]</strong> <a class="ViewSource" title="view plain" onclick="dp.sh.Toolbar.Command('ViewSource',this);return false;" href="http://blog.csdn.net/bin_520_yan/article/details/5998349#"><u><font color="#0000ff">view plain</font></u></a><a class="CopyToClipboard" title="copy" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;" href="http://blog.csdn.net/bin_520_yan/article/details/5998349#"><u><font color="#0000ff">copy</font></u></a><a class="PrintSource" title="print" onclick="dp.sh.Toolbar.Command('PrintSource',this);return false;" href="http://blog.csdn.net/bin_520_yan/article/details/5998349#"><u><font color="#0000ff">print</font></u></a><a class="About" title="?" onclick="dp.sh.Toolbar.Command('About',this);return false;" href="http://blog.csdn.net/bin_520_yan/article/details/5998349#"><u><font color="#0000ff">?</font></u></a> 
<div style="z-index: 99; position: absolute; width: 23px; height: 12px; top: 2734px; left: 447px"><u><font color="#0000ff"><embed id="ZeroClipboardMovie_5" height="12" name="ZeroClipboardMovie_5" type="application/x-shockwave-flash" align="center" pluginspage="http://www.macromedia.com/go/getflashplayer" width="23" src="http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" allowscriptaccess="always" allowfullscreen="false" flashvars="id=5&amp;width=23&amp;height=12" wmode="transparent"></font></u></div></div></div>
<ol class="dp-c"><li class="alt"><span>select&nbsp;Tree.ID,&nbsp;Tree.Name,Tree.Parent,cast(replicate(</span><span class="string">'&nbsp;'</span><span>,len(CTE.TE))+</span><span class="string">'|_'</span><span>+Tree.name&nbsp;</span><span class="keyword">as</span><span>&nbsp;nvarchar(MAX))&nbsp;</span><span class="keyword">as</span><span>&nbsp;TE,Levle+1&nbsp;</span><span class="keyword">as</span><span>&nbsp;Levle&nbsp;&nbsp;</span></li><li><span>from&nbsp;Tree&nbsp;inner&nbsp;join&nbsp;&nbsp;</span></li><li class="alt"><span>(上次递归查询的结果集，仅仅是上次那一次的，而不是以前的总和结果集)&nbsp;&nbsp;</span></li><li><span class="keyword">as</span><span>&nbsp;CTE&nbsp;&nbsp;</span></li><li class="alt"><span>on&nbsp;Tree.Parent=CTE.Name&nbsp;&nbsp;</span></li></ol></div>
<p>&nbsp;</p>
<p style="text-align: left">&nbsp;第四次递归一次类推，最后所查询的结果为上面所有递归的union。</p>
<p style="text-align: left">&nbsp;续：在上面的SQ语句查询结果中，ID为10的记录应该要放在ID为4的后面。</p>
<p style="text-align: left">&nbsp;往数据表中再次添加两条记录：</p>
<p style="text-align: left">insert Tree values('计科','计算机学院') <br />insert Tree values('我','网络1班')&nbsp;</p>
<p style="text-align: left">再次修改上面的SQL语句：</p>
<p style="text-align: left"></p>
<div class="dp-highlighter bg_c-sharp">
<div class="bar">
<div class="tools"><strong>[c-sharp]</strong> <a class="ViewSource" title="view plain" onclick="dp.sh.Toolbar.Command('ViewSource',this);return false;" href="http://blog.csdn.net/bin_520_yan/article/details/5998349#"><u><font color="#0000ff">view plain</font></u></a><a class="CopyToClipboard" title="copy" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;" href="http://blog.csdn.net/bin_520_yan/article/details/5998349#"><u><font color="#0000ff">copy</font></u></a><a class="PrintSource" title="print" onclick="dp.sh.Toolbar.Command('PrintSource',this);return false;" href="http://blog.csdn.net/bin_520_yan/article/details/5998349#"><u><font color="#0000ff">print</font></u></a><a class="About" title="?" onclick="dp.sh.Toolbar.Command('About',this);return false;" href="http://blog.csdn.net/bin_520_yan/article/details/5998349#"><u><font color="#0000ff">?</font></u></a> 
<div style="z-index: 99; position: absolute; width: 23px; height: 12px; top: 3113px; left: 447px"><u><font color="#0000ff"><embed id="ZeroClipboardMovie_6" height="12" name="ZeroClipboardMovie_6" type="application/x-shockwave-flash" align="center" pluginspage="http://www.macromedia.com/go/getflashplayer" width="23" src="http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" allowscriptaccess="always" allowfullscreen="false" flashvars="id=6&amp;width=23&amp;height=12" wmode="transparent"></font></u></div></div></div>
<ol class="dp-c"><li class="alt"><span>with&nbsp;CTE&nbsp;</span><span class="keyword">as</span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li><span>(&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li class="alt"><span>--&gt;Begin&nbsp;一个定位点成员&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li><span>&nbsp;select&nbsp;ID,&nbsp;Name,Parent,cast(Name&nbsp;<span class="keyword">as</span><span>&nbsp;nvarchar(max))&nbsp;</span><span class="keyword">as</span><span>&nbsp;TE,&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ROW_NUMBER()over(order&nbsp;by&nbsp;getdate())&nbsp;<span class="keyword">as</span><span>&nbsp;OrderID&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--最关键是上面这个字段，要获取排序字段，按字符串来排序。&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--其中窗口函数必须要使用order&nbsp;by，但是不能用整型，那就用时间吧&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;from&nbsp;Tree&nbsp;where&nbsp;Parent&nbsp;<span class="keyword">is</span><span>&nbsp;</span><span class="keyword">null</span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li><li class="alt"><span>--&gt;End&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li><span>union&nbsp;all&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li class="alt"><span>--&gt;Begin一个递归成员&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li><span>&nbsp;select&nbsp;Tree.ID,&nbsp;Tree.Name,Tree.Parent,cast(replicate(<span class="string">'&nbsp;'</span><span>,len(CTE.TE))+</span><span class="string">'|_'</span><span>+Tree.name&nbsp;</span><span class="keyword">as</span><span>&nbsp;nvarchar(MAX))&nbsp;</span><span class="keyword">as</span><span>&nbsp;TE,&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CTE.OrderID*100+ROW_NUMBER()over(Order&nbsp;by&nbsp;GETDATE())&nbsp;<span class="keyword">as</span><span>&nbsp;OrderID&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;from&nbsp;Tree&nbsp;inner&nbsp;join&nbsp;CTE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;on&nbsp;Tree.Parent=CTE.Name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li><span>--&gt;End&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li class="alt"><span>)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li><span>select&nbsp;*&nbsp;from&nbsp;CTE&nbsp;&nbsp;</span></li><li class="alt"><span>order&nbsp;by&nbsp;LTRIM(OrderID)--最后将这个整型数据转换为字符串型的进行排序&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;</span></li><li class="alt"><span>--有时候整型可以比大小，字符串也可以，字符串比的大小是一位一位进行字符比较的&nbsp;&nbsp;</span></li><li><span>--整型+字符串==整型，只有字符串+字符串==两个字符串的并和&nbsp;&nbsp;</span></li><li class="alt"><span>--递归查询中：第二条记录可以引用第一条记录的值&nbsp;&nbsp;</span></li><li><span>--动态加载记录时，同一个等级的记录识别符：RowNumber()over(order&nbsp;by&nbsp;getdate())&nbsp;&nbsp;</span></li><li class="alt"><span>--延伸：可以动态获取某个部门下的所以子部门。也可以获取该部门上级的所以部门&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;</span></li><li class="alt"><span>--总结：首先要拼凑出一个整型数据，然后转换为字符串，最后是进行字符串的order，而不是整型数据的order，&nbsp;&nbsp;</span></li></ol></div>
<p>&nbsp;</p>
<p style="text-align: left">最后的结果为：</p>
<p style="text-align: center"><img alt="" src="http://hi.csdn.net/attachment/201011/20/0_1290225874b9H7.gif" /></p>
<p style="text-align: center">图2 运行结果</p>
<p style="text-align: left">这样，无论用户插入多少条记录都可以进行按部门，按规律进行查询。</p><img src ="http://www.blogjava.net/keweibo/aggbug/415936.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2014-07-17 14:46 <a href="http://www.blogjava.net/keweibo/articles/415936.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>DataTable更新数据操作(转)</title><link>http://www.blogjava.net/keweibo/articles/415278.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Mon, 30 Jun 2014 07:49:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/415278.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/415278.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/415278.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/415278.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/415278.html</trackback:ping><description><![CDATA[<div style="text-transform: none; text-indent: 0px; margin: 7px 0px 10px; width: 758px; zoom: 1; font: 14px/1.5 tahoma, helvetica, arial; white-space: normal; letter-spacing: normal; color: rgb(69,69,69); overflow: hidden; word-spacing: 0px; -webkit-text-stroke-width: 0px" id="content" class="content mod-cs-content text-content clearfix">
<p style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">BLL层&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">&nbsp; public void Update(DataTable dt)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; foreach (DataRow dr in dt.Rows)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (dr.RowState == DataRowState.Deleted)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; continue;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (dr.RowState == DataRowState.Modified || dr.RowState == DataRowState.Added)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (dr["usr_id"] == DBNull.Value)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throw new Exception("用户代码不能为空");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dal.Update(dt);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">DAL层</p>
<p style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">&nbsp;public void Update(DataTable dt)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SqlDataAdapter adapter = new SqlDataAdapter();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SqlConnection conn = new SqlConnection(SqlHelper.ConnectionString);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; conn.Open();</p>
<p style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; adapter.InsertCommand = new SqlCommand("INSERT INTO dbo.t6( com_id ,usr_id ) VALUES( @com_id ,@usr_id)", conn);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; adapter.InsertCommand.CommandType = CommandType.Text;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; adapter.InsertCommand.Parameters.Add("@com_id", SqlDbType.VarChar, 4, "com_id");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; adapter.InsertCommand.Parameters.Add("@usr_id", SqlDbType.VarChar, 8, "usr_id");</p>
<p style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; adapter.UpdateCommand = new SqlCommand("update t6 setwhereand usr_id", conn);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; adapter.UpdateCommand.CommandType = CommandType.Text;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; adapter.UpdateCommand.Parameters.Add("@com_id", SqlDbType.VarChar, 4, "com_id");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; adapter.UpdateCommand.Parameters.Add("@usr_id", SqlDbType.VarChar, 8, "usr_id");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; adapter.UpdateCommand.Parameters.Add("@usr_id1", SqlDbType.VarChar, 8, "usr_id");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; adapter.UpdateCommand.Parameters["@usr_id1"].SourceVersion = DataRowVersion.Original;</p>
<p style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; adapter.DeleteCommand = new SqlCommand("delete from&nbsp;t6 whereand usr_id", conn);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; adapter.DeleteCommand.CommandType = CommandType.Text;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; adapter.DeleteCommand.Parameters.Add("@com_id", SqlDbType.VarChar, 4, "com_id");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; adapter.DeleteCommand.Parameters.Add("@usr_id", SqlDbType.VarChar, 8, "usr_id");</p>
<p style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; adapter.DeleteCommand.Parameters["@com_id"].SourceVersion = DataRowVersion.Original;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; adapter.DeleteCommand.Parameters["@usr_id"].SourceVersion = DataRowVersion.Original;</p>
<p style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; adapter.Update(dt);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">&nbsp;</p>
<p style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">前台</p>
<p style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">&nbsp;&nbsp;&nbsp; public partial class DataTableUpdate : Form<br />&nbsp;&nbsp;&nbsp; {</p>
<p style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public BLL.Users Bu = new BLL.Users();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public DataTable dtUsr = new DataTable();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public MOD.Users modObject = new MOD.Users();</p>
<p style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public string _UserId = "";</p>
<p style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public DataTableUpdate()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; InitializeComponent();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dataGridView1.AutoGenerateColumns = false;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">//窗口加载</p>
<p style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private void Form1_Load(object sender, EventArgs e)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dtUsr = Bu.GetList();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dataGridView1.DataSource = dtUsr;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BindValue();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private void BindValue()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tb_com_id.DataBindings.Add("Text", dataGridView1.DataSource, "com_id");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tb_UsrId.DataBindings.Add("Text", dataGridView1.DataSource, "usr_id");</p>
<p style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //手动修改可以; 代码赋值需要用下面这句话<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tb_UsrId.DataBindings[0].DataSourceUpdateMode = DataSourceUpdateMode.OnPropertyChanged;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private void 保存_Click(object sender, EventArgs e)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; foreach (DataRow dr in dtUsr.Rows)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dr.EndEdit();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Bu.Update(dtUsr);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch (Exception ex)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MessageBox.Show(ex.Message);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MessageBox.Show("保存成功！", "系统提示");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private void 删除_Click(object sender, EventArgs e)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (MessageBox.Show("您确认要删除用户：" + tb_UsrName.Text.Trim()+" ?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.No)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return;</p>
<p style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (dataGridView1.CurrentCell == null)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return;</p>
<p style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dataGridView1.Rows.Remove(dataGridView1.CurrentRow);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Bu.Update(dtUsr);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch (Exception ex)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MessageBox.Show(ex.Message);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MessageBox.Show("删除成功！", "系统提示");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private void 增加_Click(object sender, EventArgs e)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DataRow dr = dtUsr.NewRow();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dr["usr_id"] = _UserId;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dtUsr.Rows.Add(dr);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dataGridView1.CurrentCell = dataGridView1.Rows[dataGridView1.Rows.Count - 1].Cells[0];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private void 取消_Click(object sender, EventArgs e)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dtUsr.RejectChanges();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br /><u><strong>牛铁：<a style="color: rgb(63,167,203); text-decoration: underline" href="http://blog.csdn.net/fangxinggood/archive/2008/04/18/2304047.aspx">http://blog.csdn.net/fangxinggood/archive/2008/04/18/2304047.aspx</a></strong></u></p></div><img src ="http://www.blogjava.net/keweibo/aggbug/415278.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2014-06-30 15:49 <a href="http://www.blogjava.net/keweibo/articles/415278.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在数据表(DataTable)中操作数据(转)</title><link>http://www.blogjava.net/keweibo/articles/415272.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Mon, 30 Jun 2014 03:08:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/415272.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/415272.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/415272.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/415272.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/415272.html</trackback:ping><description><![CDATA[<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px">转自：<a href="http://blog.csdn.net/cui55/article/details/1371411">http://blog.csdn.net/cui55/article/details/1371411</a><br /><br />在<span class="Apple-converted-space">&nbsp;</span><strong>DataSet<span class="Apple-converted-space">&nbsp;</span></strong>中创建<span class="Apple-converted-space">&nbsp;</span><strong>DataTable</strong><span class="Apple-converted-space">&nbsp;</span>之后，您执行的活动可以与使用数据库中的表时执行的活动相同。您可以添加、查看、编辑和删除表中的数据；可以监视错误和事件；并且可以查询表中的数据。在修改<span class="Apple-converted-space">&nbsp;</span><strong>DataTable</strong><span class="Apple-converted-space">&nbsp;</span>中的数据时，您也可以验证更改是否正确，并决定是否以编程方式接受更改或拒绝更改。</p>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px">本节内容</p>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px"><font color="#ff0000">将数据添至表中</font>:说明如何创建新行并将其添至表中。</p>
<table style="text-align: left; text-transform: none; text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px" border="0" width="100%" bgcolor="#e6e6e6">
<tbody>
<tr>
<td width="100%">在创建<span class="Apple-converted-space">&nbsp;</span><strong>DataTable</strong><span class="Apple-converted-space">&nbsp;</span>并使用列和约束定义其结构之后，您可以将新的数据行添至表中。要添加新行，可将一个新变量声明为<span class="Apple-converted-space">&nbsp;</span><strong>DataRow</strong><span class="Apple-converted-space">&nbsp;</span>类型。调用<span class="Apple-converted-space">&nbsp;</span><strong>NewRow</strong><span class="Apple-converted-space">&nbsp;</span>方法时，将返回新的<span class="Apple-converted-space">&nbsp;</span><strong>DataRow</strong><span class="Apple-converted-space">&nbsp;</span>对象。然后，<strong>DataTable</strong><span class="Apple-converted-space">&nbsp;</span>会根据表的结构按<span class="Apple-converted-space">&nbsp;</span><strong>DataColumnCollection</strong><span class="Apple-converted-space">&nbsp;</span>的定义创建<span class="Apple-converted-space">&nbsp;</span><strong>DataRow</strong><span class="Apple-converted-space">&nbsp;</span>对象。 
<p>以下示例演示了如何通过调用<span class="Apple-converted-space">&nbsp;</span><strong>NewRow</strong><span class="Apple-converted-space">&nbsp;</span>方法来创建新行。</p>
<p style="display: block">DataRow workRow = workTable.NewRow();</p>
<p>然后您可以使用索引或列名来操作新添加的行，如下例所示。</p>
<p style="display: block">workRow["CustLName"] = "Smith";<br />workRow[1] = "Smith";</p>
<p>在将数据插入新行后，<strong>Add</strong><span class="Apple-converted-space">&nbsp;</span>方法可用于将行添至<span class="Apple-converted-space">&nbsp;</span><strong>DataRowCollection</strong>，如以下代码所示。</p>
<p style="display: block">workTable.Rows.Add(workRow);</p>
<p>您也可以通过传入值的数组（类型化为<span class="Apple-converted-space">&nbsp;</span><strong>Object</strong>），调用<span class="Apple-converted-space">&nbsp;</span><strong>Add</strong><span class="Apple-converted-space">&nbsp;</span>方法来添加新行，如下例所示。</p>
<p style="display: block">workTable.Rows.Add(new Object[] {1, "Smith"});</p>
<p>将类型化为<span class="Apple-converted-space">&nbsp;</span><strong>Object<span class="Apple-converted-space">&nbsp;</span></strong>的值的数组传递到<span class="Apple-converted-space">&nbsp;</span><strong>Add</strong><span class="Apple-converted-space">&nbsp;</span>方法，可在表内创建新行并将其列值设置为对象数组中的值。请注意，数组中的值会根据它们在表中出现的顺序相继与各列匹配。</p>
<p>以下示例将十行添至新建的<span class="Apple-converted-space">&nbsp;</span><strong>Customers</strong><span class="Apple-converted-space">&nbsp;</span>表中。</p>
<p style="display: block">DataRow workRow;<br /><br />for (int i = 0; i &lt;= 9; i++)&nbsp;<br />{<br />&nbsp; workRow = workTable.NewRow();<br />&nbsp; workRow[0] = i;<br />&nbsp; workRow[1] = "CustName" + i.ToString();<br />&nbsp; workTable.Rows.Add(workRow);<br />}</p></td></tr></tbody></table>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px"><font color="#ff0000">查看表中数据</font>:说明如何访问行中的数据，包括数据的原始版本和当前版本。</p>
<table style="text-align: left; text-transform: none; text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px" border="0" width="100%" bgcolor="#e6e6e6">
<tbody>
<tr>
<td width="100%">可以使用<span class="Apple-converted-space">&nbsp;</span><strong>DataTable<span class="Apple-converted-space">&nbsp;</span></strong>的<span class="Apple-converted-space">&nbsp;</span><strong>Rows</strong><span class="Apple-converted-space">&nbsp;</span>和<span class="Apple-converted-space">&nbsp;</span><strong>Columns</strong><span class="Apple-converted-space">&nbsp;</span>集合来访问<span class="Apple-converted-space">&nbsp;</span><strong>DataTable</strong><span class="Apple-converted-space">&nbsp;</span>中的内容。也可以根据包括搜索标准、排序顺序和行状态等特定标准，使用<span class="Apple-converted-space">&nbsp;</span><strong>DataTable.Select</strong><span class="Apple-converted-space">&nbsp;</span>方法返回<span class="Apple-converted-space">&nbsp;</span><strong>DataTable</strong><span class="Apple-converted-space">&nbsp;</span>中数据的子集。此外，用主键值搜索特定行时，还可使用<span class="Apple-converted-space">&nbsp;</span><strong>DataRowCollection</strong><span class="Apple-converted-space">&nbsp;</span>的<span class="Apple-converted-space">&nbsp;</span><mshelp:link keywords="frlrfSystemDataDataRowCollectionClassFindTopic">Find</mshelp:link><span class="Apple-converted-space">&nbsp;</span>方法。 
<p><strong>DataTable</strong><span class="Apple-converted-space">&nbsp;</span>对象的<span class="Apple-converted-space">&nbsp;</span><strong>Select<span class="Apple-converted-space">&nbsp;</span></strong>方法返回一组与指定条件匹配的<span class="Apple-converted-space">&nbsp;</span><strong>DataRow</strong><span class="Apple-converted-space">&nbsp;</span>对象。<strong>Select</strong><span class="Apple-converted-space">&nbsp;</span>采用筛选表达式、排序表达式和<span class="Apple-converted-space">&nbsp;</span><strong>DataViewRowState<span class="Apple-converted-space">&nbsp;</span></strong>的可选参数。筛选表达式根据<span class="Apple-converted-space">&nbsp;</span><strong>DataColumn</strong><span class="Apple-converted-space">&nbsp;</span>值（例如<span class="Apple-converted-space">&nbsp;</span><code class="ce">LastName = 'Smith'</code>。排序表达式遵循用于为列排序的标准 SQL 约定，例如<span class="Apple-converted-space">&nbsp;</span><code class="ce">LastName ASC, FirstName ASC</code>。有关编写表达式的规则，请参阅<strong>DataColumn</strong><span class="Apple-converted-space">&nbsp;</span>类的<span class="Apple-converted-space">&nbsp;</span><mshelp:link keywords="frlrfSystemDataDataColumnClassExpressionTopic">Expression</mshelp:link><span class="Apple-converted-space">&nbsp;</span>属性。</p>
<blockquote class="dtBlock"><strong class="le">提示</strong><span class="Apple-converted-space">&nbsp;</span>如果您将对<span class="Apple-converted-space">&nbsp;</span><strong>DataTable</strong><span class="Apple-converted-space">&nbsp;</span>的<span class="Apple-converted-space">&nbsp;</span><strong>Select</strong><span class="Apple-converted-space">&nbsp;</span>方法执行多次调用，可通过先为<span class="Apple-converted-space">&nbsp;</span><strong>DataTable</strong><span class="Apple-converted-space">&nbsp;</span>创建<span class="Apple-converted-space">&nbsp;</span><strong>DataView</strong>来提高性能。创建<span class="Apple-converted-space">&nbsp;</span><strong>DataView</strong><span class="Apple-converted-space">&nbsp;</span>会为表中的行编制索引。然后，<strong>Select</strong><span class="Apple-converted-space">&nbsp;</span>方法会使用该索引，这样将显著缩短生成查询结果的时间。有关为<span class="Apple-converted-space">&nbsp;</span><strong>DataTable<span class="Apple-converted-space">&nbsp;</span></strong>创建<span class="Apple-converted-space">&nbsp;</span><strong>DataView</strong><span class="Apple-converted-space">&nbsp;</span>的信息，请参阅<a style="color: rgb(51,102,153); text-decoration: none" href="http://www.xx113.com/net/book/Asp.net/4-6.htm">创建和使用 DataView</a>。</blockquote>
<p><strong>Select</strong><span class="Apple-converted-space">&nbsp;</span>方法基于<span class="Apple-converted-space">&nbsp;</span><strong>DataViewRowState<span class="Apple-converted-space">&nbsp;</span></strong>确定要查看或操作的行的版本。下表说明了可能的<span class="Apple-converted-space">&nbsp;</span><strong>DataViewRowState</strong><span class="Apple-converted-space">&nbsp;</span>枚举值。</p>
<div class="tablediv" align="left">
<table class="dtTABLE" cellspacing="1" cellpadding="0">
<tbody>
<tr valign="top">
<th bgcolor="#f2e0c1">成员名称</th>
<th bgcolor="#f2e0c1">说明</th></tr>
<tr valign="top">
<td bgcolor="#f2e0c1"><strong>CurrentRows</strong></td>
<td bgcolor="#f2e0c1">当前行，包括未更改的行、已添加的行和已修改的行。</td></tr>
<tr valign="top">
<td bgcolor="#f2e0c1"><strong>Deleted</strong></td>
<td bgcolor="#f2e0c1">已删除的行。</td></tr>
<tr valign="top">
<td bgcolor="#f2e0c1"><strong>ModifiedCurrent</strong></td>
<td bgcolor="#f2e0c1">当前版本，它是原始数据的修改版本（请参阅<strong>ModifiedOriginal</strong>）。</td></tr>
<tr valign="top">
<td bgcolor="#f2e0c1"><strong>ModifiedOriginal</strong></td>
<td bgcolor="#f2e0c1">所有已修改行的原始版本。使用<span class="Apple-converted-space">&nbsp;</span><strong>ModifiedCurrent</strong><span class="Apple-converted-space">&nbsp;</span>时，当前版本可用。</td></tr>
<tr valign="top">
<td bgcolor="#f2e0c1"><strong>Added</strong></td>
<td bgcolor="#f2e0c1">新行。</td></tr>
<tr valign="top">
<td bgcolor="#f2e0c1"><strong>None</strong></td>
<td bgcolor="#f2e0c1">无。</td></tr>
<tr valign="top">
<td bgcolor="#f2e0c1"><strong>OriginalRows</strong></td>
<td bgcolor="#f2e0c1">原始行，包括未更改的行和已删除的行。</td></tr>
<tr valign="top">
<td bgcolor="#f2e0c1"><strong>Unchanged</strong></td>
<td bgcolor="#f2e0c1">未更改的行。</td></tr></tbody></table></div>
<p>在下面的示例中，<strong>DataSet</strong><span class="Apple-converted-space">&nbsp;</span>对象已经过筛选，这样，您可以只使用其<span class="Apple-converted-space">&nbsp;</span><strong>DataViewRowState</strong><span class="Apple-converted-space">&nbsp;</span>设置为<span class="Apple-converted-space">&nbsp;</span><strong>CurrentRows</strong>的行。</p>
<p style="display: block">DataRow[] currRows = workTable.Select(null, null, DataViewRowState.CurrentRows);<br /><br />if (currRows.Length &lt; 1 )<br />&nbsp; Console.WriteLine("No Current Rows Found");<br />else<br />{<br />&nbsp; foreach (DataColumn myCol in workTable.Columns)<br />&nbsp;&nbsp;&nbsp; Console.Write("/t{0}", myCol.ColumnName);<br /><br />&nbsp; Console.WriteLine("/tRowState");<br /><br />&nbsp; foreach (DataRow myRow in currRows)<br />&nbsp; {<br />&nbsp;&nbsp;&nbsp; foreach (DataColumn myCol in workTable.Columns)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.Write("/t{0}", myRow[myCol]);<br /><br />&nbsp;&nbsp;&nbsp; Console.WriteLine("/t" + myRow.RowState);<br />&nbsp; }<br />}</p>
<p><strong>Select</strong><span class="Apple-converted-space">&nbsp;</span>方法可用于返回具有不同<span class="Apple-converted-space">&nbsp;</span><strong>RowState</strong><span class="Apple-converted-space">&nbsp;</span>值或字段值的行。以下示例返回一个引用所有已删除行的<span class="Apple-converted-space">&nbsp;</span><strong>DataRow</strong>数组，并返回另一个引用所有已排序行（按照<span class="Apple-converted-space">&nbsp;</span><strong>CustLName<span class="Apple-converted-space">&nbsp;</span></strong>排序，其中<span class="Apple-converted-space">&nbsp;</span><strong>CustID</strong><span class="Apple-converted-space">&nbsp;</span>列大于 5）的<span class="Apple-converted-space">&nbsp;</span><strong>DataRow</strong><span class="Apple-converted-space">&nbsp;</span>数组。</p>
<p style="display: block">// Retrieve all deleted rows.<br />DataRow[] delRows = workTable.Select(null, null, DataViewRowState.Deleted);<br /><br />// Retrieve rows where CustID &gt; 5, and order by CustLName.<br />DataRow[] custRows = workTable.Select("CustID &gt; 5", "CustLName ASC");</p></td></tr></tbody></table>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px"><font color="#ff0000">编辑表中的数据</font>:说明如何修改行中的数据，包括挂起对行的更改，直至验证并接受了建议的更改。</p>
<table style="text-align: left; text-transform: none; text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px" border="0" width="100%" bgcolor="#e6e6e6">
<tbody>
<tr>
<td width="100%">当您在<span class="Apple-converted-space">&nbsp;</span><strong>DataRow</strong><span class="Apple-converted-space">&nbsp;</span>中更改列值时，所做更改会立即置于行的<span class="Apple-converted-space">&nbsp;</span><strong>Current</strong><span class="Apple-converted-space">&nbsp;</span>状态中。然后，<strong>RowState</strong><span class="Apple-converted-space">&nbsp;</span>会设置为<strong>Modified</strong>，并使用<span class="Apple-converted-space">&nbsp;</span><strong>DataRow<span class="Apple-converted-space">&nbsp;</span></strong>的<span class="Apple-converted-space">&nbsp;</span><strong>AcceptChanges</strong><span class="Apple-converted-space">&nbsp;</span>或<span class="Apple-converted-space">&nbsp;</span><strong>RejectChanges</strong><span class="Apple-converted-space">&nbsp;</span>方法来接受或拒绝所做更改。<strong>DataRow</strong>还提供了三种可用于在编辑行时将行的状态挂起的方法。这些方法是<span class="Apple-converted-space">&nbsp;</span><strong>BeginEdit</strong>、<strong>EndEdit</strong><span class="Apple-converted-space">&nbsp;</span>和<span class="Apple-converted-space">&nbsp;</span><strong>CancelEdit</strong>。 
<p>当您直接在<span class="Apple-converted-space">&nbsp;</span><strong>DataRow</strong><span class="Apple-converted-space">&nbsp;</span>中修改列值时，<strong>DataRow</strong><span class="Apple-converted-space">&nbsp;</span>会使用<span class="Apple-converted-space">&nbsp;</span><strong>Current</strong>、<strong>Default</strong><span class="Apple-converted-space">&nbsp;</span>和<span class="Apple-converted-space">&nbsp;</span><strong>Original<span class="Apple-converted-space">&nbsp;</span></strong>行版本来管理列值。除这些行版本以外，<strong>BeginEdit</strong>、<strong>EndEdit</strong><span class="Apple-converted-space">&nbsp;</span>和<span class="Apple-converted-space">&nbsp;</span><strong>CancelEdit</strong><span class="Apple-converted-space">&nbsp;</span>方法还使用第四个行版本：<strong>Proposed</strong>。</p>
<p>在执行编辑操作（通过调用<span class="Apple-converted-space">&nbsp;</span><strong>BeginEdit<span class="Apple-converted-space">&nbsp;</span></strong>开始，并且通过使用<span class="Apple-converted-space">&nbsp;</span><strong>EndEdit</strong><span class="Apple-converted-space">&nbsp;</span>或<span class="Apple-converted-space">&nbsp;</span><strong>CancelEdit<span class="Apple-converted-space">&nbsp;</span></strong>或者通过调用<strong>AcceptChanges</strong><span class="Apple-converted-space">&nbsp;</span>或<span class="Apple-converted-space">&nbsp;</span><strong>RejectChanges<span class="Apple-converted-space">&nbsp;</span></strong>结束）的过程中，<strong>Proposed</strong><span class="Apple-converted-space">&nbsp;</span>行版本会存在。</p>
<p>在编辑操作过程中，您可以通过计算<span class="Apple-converted-space">&nbsp;</span><strong>DataTable</strong><span class="Apple-converted-space">&nbsp;</span>的<span class="Apple-converted-space">&nbsp;</span><strong>ColumnChanged</strong><span class="Apple-converted-space">&nbsp;</span>事件中的<span class="Apple-converted-space">&nbsp;</span><strong>ProposedValue</strong><span class="Apple-converted-space">&nbsp;</span>来将验证逻辑应用于各列。<strong>ColumnChanged</strong><span class="Apple-converted-space">&nbsp;</span>事件保存<span class="Apple-converted-space">&nbsp;</span><strong>DataColumnChangeEventArgs</strong>，可保持对正在更改的列和<strong>ProposedValue<span class="Apple-converted-space">&nbsp;</span></strong>的引用。计算了建议值后，可以对其进行修改或取消编辑。编辑结束时，行从<span class="Apple-converted-space">&nbsp;</span><strong>Proposed</strong><span class="Apple-converted-space">&nbsp;</span>状态中移出。</p>
<p>您可以通过调用<span class="Apple-converted-space">&nbsp;</span><strong>EndEdit</strong><span class="Apple-converted-space">&nbsp;</span>来确认编辑，也可以通过调用<span class="Apple-converted-space">&nbsp;</span><strong>CancelEdit</strong><span class="Apple-converted-space">&nbsp;</span>来取消编辑。请注意，尽管<span class="Apple-converted-space">&nbsp;</span><strong>EndEdit</strong><span class="Apple-converted-space">&nbsp;</span>确实已确认您所做的编辑，但在调用<span class="Apple-converted-space">&nbsp;</span><strong>AcceptChanges<span class="Apple-converted-space">&nbsp;</span></strong>之前，<strong>DataSet</strong><span class="Apple-converted-space">&nbsp;</span>并没有实际接受更改。另外请注意，如果在<strong>EndEdit</strong><span class="Apple-converted-space">&nbsp;</span>或<span class="Apple-converted-space">&nbsp;</span><strong>CancelEdit<span class="Apple-converted-space">&nbsp;</span></strong>编辑结束之前调用<span class="Apple-converted-space">&nbsp;</span><strong>AcceptChanges</strong>，编辑将会终止，并接受<span class="Apple-converted-space">&nbsp;</span><strong>Current</strong><span class="Apple-converted-space">&nbsp;</span>和<span class="Apple-converted-space">&nbsp;</span><strong>Original</strong><span class="Apple-converted-space">&nbsp;</span>行版本的<span class="Apple-converted-space">&nbsp;</span><strong>Proposed</strong><span class="Apple-converted-space">&nbsp;</span>行值。调用<span class="Apple-converted-space">&nbsp;</span><strong>RejectChanges</strong><span class="Apple-converted-space">&nbsp;</span>会以同样的方式结束编辑，并放弃<span class="Apple-converted-space">&nbsp;</span><strong>Current</strong><span class="Apple-converted-space">&nbsp;</span>和<span class="Apple-converted-space">&nbsp;</span><strong>Proposed</strong><span class="Apple-converted-space">&nbsp;</span>行版本。在调用<span class="Apple-converted-space">&nbsp;</span><strong>AcceptChanges</strong><span class="Apple-converted-space">&nbsp;</span>或<span class="Apple-converted-space">&nbsp;</span><strong>RejectChanges</strong><span class="Apple-converted-space">&nbsp;</span>之后调用<span class="Apple-converted-space">&nbsp;</span><strong>EndEdit</strong><span class="Apple-converted-space">&nbsp;</span>或<span class="Apple-converted-space">&nbsp;</span><strong>CancelEdit</strong><span class="Apple-converted-space">&nbsp;</span>不会起作用，因为编辑已经结束。</p>
<p>以下示例演示了如何将<span class="Apple-converted-space">&nbsp;</span><strong>BeginEdit<span class="Apple-converted-space">&nbsp;</span></strong>与<span class="Apple-converted-space">&nbsp;</span><strong>EndEdit</strong><span class="Apple-converted-space">&nbsp;</span>和<span class="Apple-converted-space">&nbsp;</span><strong>CancelEdit</strong><span class="Apple-converted-space">&nbsp;</span>一起使用。本示例也会检查<span class="Apple-converted-space">&nbsp;</span><strong>ColumnChanged</strong><span class="Apple-converted-space">&nbsp;</span>事件中的<span class="Apple-converted-space">&nbsp;</span><strong>ProposedValue</strong>，并决定是否取消编辑。</p>
<p style="display: block">DataTable&nbsp; workTable&nbsp; = new DataTable();<br />workTable.Columns.Add("LastName", typeof(String));<br /><br />workTable.ColumnChanged += new DataColumnChangeEventHandler(OnColumnChanged);<br /><br />DataRow workRow = workTable.NewRow();<br />workRow[0] = "Smith";<br />workTable.Rows.Add(workRow);<br /><br />workRow.BeginEdit();<br />// Causes the ColumnChanged event to write a message and cancel the edit.<br />workRow[0] = "";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />workRow.EndEdit();<br /><br />// Displays "Smith, New".<br />Console.WriteLine("{0}, {1}", workRow[0], workRow.RowState);&nbsp;&nbsp;<br /><br /><br />protected static void OnColumnChanged(Object sender, DataColumnChangeEventArgs args)<br />{<br />&nbsp; if (args.Column.ColumnName == "LastName")<br />&nbsp;&nbsp;&nbsp; if (args.ProposedValue.ToString() == "")<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.WriteLine("Last Name cannot be blank. Edit canceled.");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; args.Row.CancelEdit();<br />&nbsp;&nbsp;&nbsp; }<br />}</p></td></tr></tbody></table>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px"><font color="#ff0000">行状态与行版本</font>:提供有关行的不同状态的信息。</p>
<table style="text-align: left; text-transform: none; text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px" border="0" width="100%" bgcolor="#e6e6e6">
<tbody>
<tr>
<td width="100%">ADO.NET 用行状态和版本管理表中的行。行状态表示行的状态。当修改行时，行版本会维护存储于行中的值，包括当前值、原始值和默认值。例如，修改了某行中的一列后，该行会有一个<span class="Apple-converted-space">&nbsp;</span><strong>Modified</strong><span class="Apple-converted-space">&nbsp;</span>的行状态，并且会存在两个行版本：<strong>Current</strong>（包含当前行值）和<span class="Apple-converted-space">&nbsp;</span><strong>Original</strong>（包含修改该列前的行值）。 
<p>每个<span class="Apple-converted-space">&nbsp;</span><strong>DataRow</strong><span class="Apple-converted-space">&nbsp;</span>对象都具有<span class="Apple-converted-space">&nbsp;</span><strong>RowState</strong><span class="Apple-converted-space">&nbsp;</span>属性，您可以检查此属性来确定行的当前状态。下表给出了对各<strong>RowState</strong><span class="Apple-converted-space">&nbsp;</span>枚举值的简要说明。</p>
<div class="tablediv">
<div align="center">
<center>
<table class="dtTABLE" cellspacing="1" cellpadding="0">
<tbody>
<tr valign="top">
<th bgcolor="#f2e0c1">RowState</th>
<th bgcolor="#f2e0c1">说明</th></tr>
<tr valign="top">
<td bgcolor="#f2e0c1"><strong>Unchanged</strong></td>
<td bgcolor="#f2e0c1">自上次调用<span class="Apple-converted-space">&nbsp;</span><strong>AcceptChanges</strong><span class="Apple-converted-space">&nbsp;</span>之后，或自<span class="Apple-converted-space">&nbsp;</span><strong>DataAdapter.Fill<span class="Apple-converted-space">&nbsp;</span></strong>创建了行之后，未做出过任何更改。</td></tr>
<tr valign="top">
<td bgcolor="#f2e0c1"><strong>Added</strong></td>
<td bgcolor="#f2e0c1">已将行添至表中，但尚未调用<span class="Apple-converted-space">&nbsp;</span><strong>AcceptChanges</strong>。</td></tr>
<tr valign="top">
<td bgcolor="#f2e0c1"><strong>Modified</strong></td>
<td bgcolor="#f2e0c1">已更改了行的一些元素。</td></tr>
<tr valign="top">
<td bgcolor="#f2e0c1"><strong>Deleted</strong></td>
<td bgcolor="#f2e0c1">已将该行从表中删除，并且尚未调用<span class="Apple-converted-space">&nbsp;</span><strong>AcceptChanges</strong>。</td></tr>
<tr valign="top">
<td bgcolor="#f2e0c1"><strong>Detached</strong></td>
<td bgcolor="#f2e0c1">对于已经创建但不属于任何<span class="Apple-converted-space">&nbsp;</span><strong>DataRowCollection</strong><span class="Apple-converted-space">&nbsp;</span>的行，设置为<span class="Apple-converted-space">&nbsp;</span><strong>Detached</strong>。新建行的<span class="Apple-converted-space">&nbsp;</span><strong>RowState</strong>设置为<span class="Apple-converted-space">&nbsp;</span><strong>Detached</strong>。通过调用<span class="Apple-converted-space">&nbsp;</span><strong>Add</strong><span class="Apple-converted-space">&nbsp;</span>方法将新的<span class="Apple-converted-space">&nbsp;</span><strong>DataRow</strong><span class="Apple-converted-space">&nbsp;</span>添至<span class="Apple-converted-space">&nbsp;</span><strong>DataRowCollection</strong><span class="Apple-converted-space">&nbsp;</span>之后，<strong>RowState</strong><span class="Apple-converted-space">&nbsp;</span>属性的值设置为<span class="Apple-converted-space">&nbsp;</span><strong>Added</strong>。 
<p>对于已经使用<span class="Apple-converted-space">&nbsp;</span><strong>Remove</strong><span class="Apple-converted-space">&nbsp;</span>方法（或是在使用<span class="Apple-converted-space">&nbsp;</span><strong>Delete</strong><span class="Apple-converted-space">&nbsp;</span>方法之后使用了<span class="Apple-converted-space">&nbsp;</span><strong>AcceptChanges</strong><span class="Apple-converted-space">&nbsp;</span>方法）从<strong>DataRowCollection</strong><span class="Apple-converted-space">&nbsp;</span>中移除的行，也设置为<span class="Apple-converted-space">&nbsp;</span><strong>Detached</strong>。</p></td></tr></tbody></table></center></div></div>
<p>在<span class="Apple-converted-space">&nbsp;</span><strong>DataSet</strong>、<strong>DataTable</strong><span class="Apple-converted-space">&nbsp;</span>或<span class="Apple-converted-space">&nbsp;</span><strong>DataRow</strong><span class="Apple-converted-space">&nbsp;</span>上调用<span class="Apple-converted-space">&nbsp;</span><strong>AcceptChanges</strong><span class="Apple-converted-space">&nbsp;</span>时，会移除行状态为<span class="Apple-converted-space">&nbsp;</span><strong>Deleted</strong><span class="Apple-converted-space">&nbsp;</span>的所有行。剩余的行会被赋予<span class="Apple-converted-space">&nbsp;</span><strong>Unchanged</strong><span class="Apple-converted-space">&nbsp;</span>行状态，并且<span class="Apple-converted-space">&nbsp;</span><strong>Original</strong><span class="Apple-converted-space">&nbsp;</span>行版本中的值会改写为<span class="Apple-converted-space">&nbsp;</span><strong>Current</strong><span class="Apple-converted-space">&nbsp;</span>行版本值。调用<strong>RejectChanges</strong><span class="Apple-converted-space">&nbsp;</span>时，会移除行状态为<span class="Apple-converted-space">&nbsp;</span><strong>Added</strong><span class="Apple-converted-space">&nbsp;</span>的所有行。剩余的行会被赋予<span class="Apple-converted-space">&nbsp;</span><strong>Unchanged</strong><span class="Apple-converted-space">&nbsp;</span>的行状态，并且<strong>Current</strong><span class="Apple-converted-space">&nbsp;</span>行版本中的值会改写为<span class="Apple-converted-space">&nbsp;</span><strong>Original</strong><span class="Apple-converted-space">&nbsp;</span>行版本值。</p>
<p>通过用列引用来传递<span class="Apple-converted-space">&nbsp;</span><strong>DataRowVersion</strong><span class="Apple-converted-space">&nbsp;</span>参数，您可以查看行的不同行版本，如下例所示。</p>
<p style="display: block">DataRow custRow = custTable.Rows[0];<br />string custID = custRow["CustomerID", DataRowVersion.Original].ToString();</p>
<p>下表给出了各<span class="Apple-converted-space">&nbsp;</span><strong>DataRowVersion</strong><span class="Apple-converted-space">&nbsp;</span>枚举值的简要说明。</p>
<div class="tablediv">
<div align="center">
<center>
<table class="dtTABLE" cellspacing="1" cellpadding="0">
<tbody>
<tr valign="top">
<th bgcolor="#f2e0c1">DataRowVersion</th>
<th bgcolor="#f2e0c1">说明</th></tr>
<tr valign="top">
<td bgcolor="#f2e0c1"><strong>Current</strong></td>
<td bgcolor="#f2e0c1">行的当前值。如果是有<span class="Apple-converted-space">&nbsp;</span><strong>Deleted</strong><span class="Apple-converted-space">&nbsp;</span>的<span class="Apple-converted-space">&nbsp;</span><strong>RowState</strong><span class="Apple-converted-space">&nbsp;</span>的行，则不存在此行版本。</td></tr>
<tr valign="top">
<td bgcolor="#f2e0c1"><strong>Default</strong></td>
<td bgcolor="#f2e0c1">特定行的默认行版本。<strong>Added</strong>、<strong>Modified</strong><span class="Apple-converted-space">&nbsp;</span>或<span class="Apple-converted-space">&nbsp;</span><strong>Unchanged</strong><span class="Apple-converted-space">&nbsp;</span>行的默认行版本是<strong>Current</strong>。<strong>Deleted</strong><span class="Apple-converted-space">&nbsp;</span>行的默认行版本是<span class="Apple-converted-space">&nbsp;</span><strong>Original</strong>。<strong>Detached</strong><span class="Apple-converted-space">&nbsp;</span>行的默认行版本是<span class="Apple-converted-space">&nbsp;</span><strong>Proposed</strong>。</td></tr>
<tr valign="top">
<td bgcolor="#f2e0c1"><strong>Original</strong></td>
<td bgcolor="#f2e0c1">行的原始值。如果是有<span class="Apple-converted-space">&nbsp;</span><strong>Added</strong><span class="Apple-converted-space">&nbsp;</span>的<span class="Apple-converted-space">&nbsp;</span><strong>RowState</strong><span class="Apple-converted-space">&nbsp;</span>的行，则不存在此行版本。</td></tr>
<tr valign="top">
<td bgcolor="#f2e0c1"><strong>Proposed</strong></td>
<td bgcolor="#f2e0c1">行的建议值。在对行进行编辑操作期间，或对于不属于<span class="Apple-converted-space">&nbsp;</span><strong>DataRowCollection</strong><span class="Apple-converted-space">&nbsp;</span>的行，存在此行版本。</td></tr></tbody></table></center></div></div>
<p>通过调用<span class="Apple-converted-space">&nbsp;</span><strong>HasVersion</strong><span class="Apple-converted-space">&nbsp;</span>方法并将<span class="Apple-converted-space">&nbsp;</span><strong>DataRowVersion</strong><span class="Apple-converted-space">&nbsp;</span>作为参数传递，您可以测试<span class="Apple-converted-space">&nbsp;</span><strong>DataRow</strong><span class="Apple-converted-space">&nbsp;</span>是否具有特定的行版本。例如，在调用<span class="Apple-converted-space">&nbsp;</span><strong>AcceptChanges</strong><span class="Apple-converted-space">&nbsp;</span>之前，<code class="ce">DataRow.HasVersion(DataRowVersion.Original)</code><span class="Apple-converted-space">&nbsp;</span>对新添加的行将返回<span class="Apple-converted-space">&nbsp;</span><strong>false</strong>。</p>
<p>例如，以下代码示例显示了表中所有已删除行的值。已删除的行没有<span class="Apple-converted-space">&nbsp;</span><strong>Current</strong><span class="Apple-converted-space">&nbsp;</span>行版本，因此在访问列值时必须传递<span class="Apple-converted-space">&nbsp;</span><strong>DataRowVersion.Original</strong>。</p>
<p style="display: block">DataTable catTable = catDS.Tables["Categories"];<br /><br />DataRow[] delRows = catTable.Select(null, null, DataViewRowState.Deleted);<br /><br />Console.WriteLine("Deleted rows:/n");<br /><br />foreach (DataColumn catCol in catTable.Columns)<br />&nbsp; Console.Write(catCol.ColumnName + "/t");<br />Console.WriteLine();<br /><br />foreach (DataRow delRow in delRows)<br />{<br />&nbsp; foreach (DataColumn catCol in catTable.Columns)<br />&nbsp;&nbsp;&nbsp; Console.Write(delRow[catCol, DataRowVersion.Original] + "/t");<br />&nbsp; Console.WriteLine();<br />}</p></td></tr></tbody></table>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px"><font color="#ff0000">从表中删除行</font>:说明如何从表中移除行。</p>
<table style="text-align: left; text-transform: none; text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px" border="0" width="100%" bgcolor="#e6e6e6">
<tbody>
<tr>
<td width="100%">用于从<span class="Apple-converted-space">&nbsp;</span><strong>DataTable</strong><span class="Apple-converted-space">&nbsp;</span>对象中删除<span class="Apple-converted-space">&nbsp;</span><strong>DataRow</strong><span class="Apple-converted-space">&nbsp;</span>对象的方法有两种：<strong>DataRowCollection</strong><span class="Apple-converted-space">&nbsp;</span>对象的<span class="Apple-converted-space">&nbsp;</span><strong>Remove</strong><span class="Apple-converted-space">&nbsp;</span>方法和<strong>DataRow</strong><span class="Apple-converted-space">&nbsp;</span>对象的<span class="Apple-converted-space">&nbsp;</span><strong>Delete</strong><span class="Apple-converted-space">&nbsp;</span>方法。<strong>Remove</strong><span class="Apple-converted-space">&nbsp;</span>方法从<span class="Apple-converted-space">&nbsp;</span><strong>DataRowCollection<span class="Apple-converted-space">&nbsp;</span></strong>中删除<span class="Apple-converted-space">&nbsp;</span><strong>DataRow</strong>，而<span class="Apple-converted-space">&nbsp;</span><strong>Delete</strong><span class="Apple-converted-space">&nbsp;</span>方法只将行标记为删除。当应用程序调用<span class="Apple-converted-space">&nbsp;</span><strong>AcceptChanges</strong><span class="Apple-converted-space">&nbsp;</span>方法时，才会发生实际的删除。通过使用<span class="Apple-converted-space">&nbsp;</span><strong>Delete</strong>，您可以在实际删除之前先以编程方式检查哪些行标记为删除。如果将行标记为删除，其<span class="Apple-converted-space">&nbsp;</span><strong>RowState</strong><span class="Apple-converted-space">&nbsp;</span>属性会设置为<span class="Apple-converted-space">&nbsp;</span><strong>Deleted</strong>。 
<p>在将<span class="Apple-converted-space">&nbsp;</span><strong>DataSet</strong><span class="Apple-converted-space">&nbsp;</span>或<span class="Apple-converted-space">&nbsp;</span><strong>DataTable</strong><span class="Apple-converted-space">&nbsp;</span>与<span class="Apple-converted-space">&nbsp;</span><strong>DataAdapter</strong><span class="Apple-converted-space">&nbsp;</span>和关系型数据源一起使用时，用<span class="Apple-converted-space">&nbsp;</span><strong>DataRow</strong><span class="Apple-converted-space">&nbsp;</span>的<span class="Apple-converted-space">&nbsp;</span><strong>Delete</strong><span class="Apple-converted-space">&nbsp;</span>方法移除行。<strong>Delete</strong><span class="Apple-converted-space">&nbsp;</span>方法只是在<span class="Apple-converted-space">&nbsp;</span><strong>DataSet</strong><span class="Apple-converted-space">&nbsp;</span>或<span class="Apple-converted-space">&nbsp;</span><strong>DataTable</strong><span class="Apple-converted-space">&nbsp;</span>中将行标记为<span class="Apple-converted-space">&nbsp;</span><strong>Deleted</strong>，而不会移除它。而<span class="Apple-converted-space">&nbsp;</span><strong>DataAdapter</strong><span class="Apple-converted-space">&nbsp;</span>在遇到标记为<span class="Apple-converted-space">&nbsp;</span><strong>Deleted</strong><span class="Apple-converted-space">&nbsp;</span>的行时，会执行其<span class="Apple-converted-space">&nbsp;</span><strong>DeleteCommand</strong><span class="Apple-converted-space">&nbsp;</span>以在数据源中删除该行。然后，就可以用<strong>AcceptChanges</strong><span class="Apple-converted-space">&nbsp;</span>方法永久移除该行。如果使用<span class="Apple-converted-space">&nbsp;</span><strong>Remove</strong><span class="Apple-converted-space">&nbsp;</span>删除该行，则该行将从表中完全移除，但<strong>DataAdapter</strong><span class="Apple-converted-space">&nbsp;</span>不会在数据源中删除该行。</p>
<p><strong>DataRowCollection</strong><span class="Apple-converted-space">&nbsp;</span>的<span class="Apple-converted-space">&nbsp;</span><strong>Remove</strong><span class="Apple-converted-space">&nbsp;</span>方法采用<span class="Apple-converted-space">&nbsp;</span><strong>DataRow</strong><span class="Apple-converted-space">&nbsp;</span>作为参数，并将其从集合中移除，如下例所示。</p>
<p style="display: block">workTable.Rows.Remove(workRow);</p>
<p>作为对比，以下示例演示了如何调用<span class="Apple-converted-space">&nbsp;</span><strong>DataRow</strong><span class="Apple-converted-space">&nbsp;</span>上的<span class="Apple-converted-space">&nbsp;</span><strong>Delete</strong><span class="Apple-converted-space">&nbsp;</span>方法来将其<span class="Apple-converted-space">&nbsp;</span><strong>RowState</strong><span class="Apple-converted-space">&nbsp;</span>改为<span class="Apple-converted-space">&nbsp;</span><strong>Deleted</strong>。</p>
<p style="display: block">workRow.Delete();</p>
<p>如果将行标记为删除，并且调用<span class="Apple-converted-space">&nbsp;</span><strong>DataTable</strong><span class="Apple-converted-space">&nbsp;</span>对象的<span class="Apple-converted-space">&nbsp;</span><strong>AcceptChanges</strong><span class="Apple-converted-space">&nbsp;</span>方法，该行就会从<span class="Apple-converted-space">&nbsp;</span><strong>DataTable<span class="Apple-converted-space">&nbsp;</span></strong>中移除。相比之下，如果调用<span class="Apple-converted-space">&nbsp;</span><strong>RejectChanges</strong>，行的<span class="Apple-converted-space">&nbsp;</span><strong>RowState</strong><span class="Apple-converted-space">&nbsp;</span>就会恢复到被标记为<span class="Apple-converted-space">&nbsp;</span><strong>Deleted<span class="Apple-converted-space">&nbsp;</span></strong>之前的状态。</p>
<blockquote class="dtBlock"><strong class="le">注意</strong><span class="Apple-converted-space">&nbsp;</span>如果<span class="Apple-converted-space">&nbsp;</span><strong>DataRow</strong><span class="Apple-converted-space">&nbsp;</span>的<span class="Apple-converted-space">&nbsp;</span><strong>RowState</strong><span class="Apple-converted-space">&nbsp;</span>是<span class="Apple-converted-space">&nbsp;</span><strong>Added</strong>，则意味着已将其添至表中，然后将其标记为<strong>Deleted</strong>，从表中移除。</blockquote></td></tr></tbody></table>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px"><font color="#ff0000">添加和读取行错误信息</font>:说明如何按行插入错误信息，以用于解决有关应用程序内行中数据的问题。</p>
<table style="text-align: left; text-transform: none; text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px" border="0" width="100%" bgcolor="#e6e6e6">
<tbody>
<tr>
<td width="100%">为了避免在编辑<span class="Apple-converted-space">&nbsp;</span><strong>DataTable<span class="Apple-converted-space">&nbsp;</span></strong>中的值时每次发生行错误都必须响应，可将错误信息添至行中，以便以后使用。<strong>DataRow</strong><span class="Apple-converted-space">&nbsp;</span>对象通过对各行提供<span class="Apple-converted-space">&nbsp;</span><strong>RowError</strong><span class="Apple-converted-space">&nbsp;</span>属性来支持此功能。将数据添至<span class="Apple-converted-space">&nbsp;</span><strong>DataRow</strong><span class="Apple-converted-space">&nbsp;</span>的<span class="Apple-converted-space">&nbsp;</span><strong>RowError</strong><span class="Apple-converted-space">&nbsp;</span>属性会将<strong>DataRow</strong><span class="Apple-converted-space">&nbsp;</span>的<span class="Apple-converted-space">&nbsp;</span><strong>HasErrors</strong><span class="Apple-converted-space">&nbsp;</span>属性标记为<span class="Apple-converted-space">&nbsp;</span><strong>true</strong>。如果<span class="Apple-converted-space">&nbsp;</span><strong>DataRow</strong><span class="Apple-converted-space">&nbsp;</span>是<span class="Apple-converted-space">&nbsp;</span><strong>DataTable<span class="Apple-converted-space">&nbsp;</span></strong>的组成部分，且<span class="Apple-converted-space">&nbsp;</span><strong>DataRow.HasErrors</strong>是<span class="Apple-converted-space">&nbsp;</span><strong>true</strong>，则<span class="Apple-converted-space">&nbsp;</span><strong>DataTable.HasErrors</strong><span class="Apple-converted-space">&nbsp;</span>属性也是<span class="Apple-converted-space">&nbsp;</span><strong>true</strong>。这也适用于<span class="Apple-converted-space">&nbsp;</span><strong>DataTable</strong><span class="Apple-converted-space">&nbsp;</span>所属的<span class="Apple-converted-space">&nbsp;</span><strong>DataSet</strong>。为错误做测试时，可以检查<span class="Apple-converted-space">&nbsp;</span><strong>HasErrors</strong><span class="Apple-converted-space">&nbsp;</span>属性以确定错误信息是否已添至所有行。如果<span class="Apple-converted-space">&nbsp;</span><strong>HasErrors</strong><span class="Apple-converted-space">&nbsp;</span>为<span class="Apple-converted-space">&nbsp;</span><strong>true</strong>，则可使用<span class="Apple-converted-space">&nbsp;</span><strong>DataTable</strong><span class="Apple-converted-space">&nbsp;</span>的<strong>GetErrors</strong><span class="Apple-converted-space">&nbsp;</span>方法以便只返回和检查有错误的行，如下例所示。 
<p style="display: block">DataTable&nbsp; workTable = new DataTable("Customers");<br />workTable.Columns.Add("CustID", typeof(Int32));<br />workTable.Columns.Add("Total", typeof(Double));<br /><br />workTable.RowChanged += new DataRowChangeEventHandler(OnRowChanged);<br /><br />for (int i = 0; i &lt; 10; i++)<br />&nbsp; workTable.Rows.Add(new Object[] {i, i*100});<br /><br />if (workTable.HasErrors)<br />{<br />&nbsp; Console.WriteLine("Errors In Table " + workTable.TableName);<br /><br />&nbsp; foreach (DataRow myRow in workTable.GetErrors())<br />&nbsp; {<br />&nbsp;&nbsp;&nbsp; Console.WriteLine("CustID = " + myRow["CustID"]);<br />&nbsp;&nbsp;&nbsp; Console.WriteLine(" Error = " + myRow.RowError + "/n");<br />&nbsp; }<br />}<br /><br />protected static void OnRowChanged(Object sender, DataRowChangeEventArgs args)<br />{<br />&nbsp; // Check for zero values.<br />&nbsp; if (args.Row["Total"].Equals(0D))<br />&nbsp;&nbsp;&nbsp; args.Row.RowError = "Total cannot be 0.";<br />}</p></td></tr></tbody></table>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px"><font color="#ff0000">接受或拒绝对行的更改</font>:说明如何接受或拒绝对行的更改。</p>
<table style="text-align: left; text-transform: none; text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px" border="0" width="100%" bgcolor="#e6e6e6">
<tbody>
<tr>
<td width="100%">在检验过对<span class="Apple-converted-space">&nbsp;</span><strong>DataTable<span class="Apple-converted-space">&nbsp;</span></strong>中的数据所做更改的准确性之后，可使用<span class="Apple-converted-space">&nbsp;</span><strong>DataRow</strong>、<strong>DataTable<span class="Apple-converted-space">&nbsp;</span></strong>或<span class="Apple-converted-space">&nbsp;</span><strong>DataSet<span class="Apple-converted-space">&nbsp;</span></strong>的<strong>AcceptChanges</strong><span class="Apple-converted-space">&nbsp;</span>方法来接受更改，此方法会将<span class="Apple-converted-space">&nbsp;</span><strong>Current</strong><span class="Apple-converted-space">&nbsp;</span>行值设置为<span class="Apple-converted-space">&nbsp;</span><strong>Original</strong><span class="Apple-converted-space">&nbsp;</span>值，并会将<span class="Apple-converted-space">&nbsp;</span><strong>RowState</strong><span class="Apple-converted-space">&nbsp;</span>属性设置为<span class="Apple-converted-space">&nbsp;</span><strong>Unchanged</strong>。接受或拒绝更改会清除所有<span class="Apple-converted-space">&nbsp;</span><strong>RowError</strong><span class="Apple-converted-space">&nbsp;</span>信息，并将<span class="Apple-converted-space">&nbsp;</span><strong>HasErrors</strong><span class="Apple-converted-space">&nbsp;</span>属性设置为<span class="Apple-converted-space">&nbsp;</span><strong>false</strong>。接受或拒绝更改还可以影响在数据源中更新数据。有关更多信息，请参阅<a style="color: rgb(51,102,153); text-decoration: none" href="http://www.xx113.com/net/book/Asp.net/4-2-a.htm">使用 DataAdapter 和 DataSet 更新数据库</a>。 
<p>如果<span class="Apple-converted-space">&nbsp;</span><strong>DataTable<span class="Apple-converted-space">&nbsp;</span></strong>上存在外键约束，使用<span class="Apple-converted-space">&nbsp;</span><strong>AcceptChanges</strong><span class="Apple-converted-space">&nbsp;</span>和<span class="Apple-converted-space">&nbsp;</span><strong>RejectChanges</strong><span class="Apple-converted-space">&nbsp;</span>接受或拒绝的更改就会根据<strong>ForeignKeyConstraint.AcceptRejectRule<span class="Apple-converted-space">&nbsp;</span></strong>传播至<span class="Apple-converted-space">&nbsp;</span><strong>DataRow</strong><span class="Apple-converted-space">&nbsp;</span>的子行。</p>
<p>以下示例检查有错误的行，在适用之处解决错误，拒绝无法解决错误的行。请注意，对于解决的错误，<strong>RowError</strong>值会重置为空字符串，导致将<span class="Apple-converted-space">&nbsp;</span><strong>HasErrors</strong><span class="Apple-converted-space">&nbsp;</span>属性设置为<span class="Apple-converted-space">&nbsp;</span><strong>false</strong>。当解决或拒绝了所有的有错误的行时，就会调用<strong>AcceptChanges</strong><span class="Apple-converted-space">&nbsp;</span>来接受对整个<span class="Apple-converted-space">&nbsp;</span><strong>DataTable<span class="Apple-converted-space">&nbsp;</span></strong>的所有更改。</p>
<p style="display: block">if (workTable.HasErrors)<br />{<br /><br />&nbsp; foreach (DataRow errRow in workTable.GetErrors())<br />&nbsp; {<br />&nbsp;&nbsp;&nbsp; if (errRow.RowError == "Total cannot exceed 1000.")<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; errRow["Total"] = 1000;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; errRow.RowError = "";&nbsp;&nbsp;&nbsp; // Clear the error.<br />&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; errRow.RejectChanges();<br />&nbsp; }<br />}<br /><br />workTable.AcceptChanges();</p></td></tr></tbody></table>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px"><font color="#ff0000">处理 DataTable 事件</font>:提供可用于<span class="Apple-converted-space">&nbsp;</span><strong>DataTable<span class="Apple-converted-space">&nbsp;</span></strong>的事件的相关信息，包括修改列值和添加或删除行时的事件。</p>
<table style="text-align: left; text-transform: none; text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px" border="0" width="100%" bgcolor="#e6e6e6">
<tbody>
<tr>
<td width="100%"><strong>DataTable</strong><span class="Apple-converted-space">&nbsp;</span>对象提供一系列可由应用程序处理的事件。下表说明了<span class="Apple-converted-space">&nbsp;</span><strong>DataTable</strong><span class="Apple-converted-space">&nbsp;</span>事件。 
<div class="tablediv" align="left">
<table class="dtTABLE" cellspacing="1" cellpadding="0">
<tbody>
<tr valign="top">
<th bgcolor="#f2e0c1">事件</th>
<th bgcolor="#f2e0c1">说明</th></tr>
<tr valign="top">
<td bgcolor="#f2e0c1"><strong>ColumnChanged</strong></td>
<td bgcolor="#f2e0c1">在值已成功插入列时发生。</td></tr>
<tr valign="top">
<td bgcolor="#f2e0c1"><strong>ColumnChanging</strong></td>
<td bgcolor="#f2e0c1">在已提交列值时发生。</td></tr>
<tr valign="top">
<td bgcolor="#f2e0c1"><strong>RowChanged</strong></td>
<td bgcolor="#f2e0c1">在已成功编辑表中的行后发生。</td></tr>
<tr valign="top">
<td bgcolor="#f2e0c1"><strong>RowChanging</strong></td>
<td bgcolor="#f2e0c1">当正在更改表中的行时发生。</td></tr>
<tr valign="top">
<td bgcolor="#f2e0c1"><strong>RowDeleted</strong></td>
<td bgcolor="#f2e0c1">在表中的某行已被标记为<span class="Apple-converted-space">&nbsp;</span><strong>Deleted</strong><span class="Apple-converted-space">&nbsp;</span>之后发生。</td></tr>
<tr valign="top">
<td bgcolor="#f2e0c1"><strong>RowDeleting</strong></td>
<td bgcolor="#f2e0c1">在表中的某行被标记为<span class="Apple-converted-space">&nbsp;</span><strong>Deleted</strong><span class="Apple-converted-space">&nbsp;</span>之前发生。</td></tr></tbody></table></div>
<p>以下示例创建 4 个事件：<strong>OnColumnChanged</strong>、<strong>OnColumnChanging</strong>、<strong>OnRowChanged</strong><span class="Apple-converted-space">&nbsp;</span>和<strong>OnRowChanging</strong>。这些事件中的每一个都在列或行更改时发生。</p>
<p style="display: block">workTable.ColumnChanged&nbsp; += new DataColumnChangeEventHandler(OnColumnChanged);<br />workTable.ColumnChanging += new DataColumnChangeEventHandler(OnColumnChanging);<br />workTable.RowChanged&nbsp;&nbsp;&nbsp;&nbsp; += new DataRowChangeEventHandler(OnRowChanged);<br />workTable.RowChanging&nbsp;&nbsp;&nbsp; += new DataRowChangeEventHandler(OnRowChanging);<br /><br />protected static void OnColumnChanged(object sender, DataColumnChangeEventArgs args)<br />{<br />&nbsp; Console.Write(" ColumnChanged: ");<br />&nbsp; Console.Write(args.Column.ColumnName + " changed to '" + args.ProposedValue + "'/n");<br />}<br /><br />protected static void OnColumnChanging(object sender, DataColumnChangeEventArgs args)<br />{<br />&nbsp; Console.Write("ColumnChanging: ");<br />&nbsp; Console.Write(args.Column.ColumnName + " equals '" + args.Row[args.Column] +<span class="Apple-converted-space">&nbsp;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "', changing to '" + args.ProposedValue + "'/n");&nbsp;&nbsp;&nbsp;<span class="Apple-converted-space">&nbsp;</span><br />}<br /><br />protected static void OnRowChanging(object sender, DataRowChangeEventArgs args)<br />{<br />&nbsp; if (args.Action != DataRowAction.Nothing)<br />&nbsp;&nbsp;&nbsp; Console.WriteLine("&nbsp;&nbsp; RowChanging: Action = " + args.Action + ", CustID = " + args.Row["CustID"]);<br />}<br /><br />protected static void OnRowChanged(object sender, DataRowChangeEventArgs args)<br />{<br />&nbsp; if (args.Action != DataRowAction.Nothing)<br />&nbsp;&nbsp;&nbsp; Console.WriteLine("&nbsp;&nbsp;&nbsp; RowChanged: Action = " + args.Action + ", CustID = " + args.Row["CustID"]);<br />}</p></td></tr></tbody></table><img src ="http://www.blogjava.net/keweibo/aggbug/415272.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2014-06-30 11:08 <a href="http://www.blogjava.net/keweibo/articles/415272.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SQL Server 2000 Split 自定义函数</title><link>http://www.blogjava.net/keweibo/articles/406147.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Fri, 08 Nov 2013 08:57:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/406147.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/406147.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/406147.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/406147.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/406147.html</trackback:ping><description><![CDATA[<div>/****** Object: Function [dbo].[F_SQLSERVER_SPLIT] &nbsp; Script Date: 2013-10-30 16:21:46 ******/</div><div>USE [ZBP];</div><div>GO</div><div>SET ANSI_NULLS OFF;</div><div>GO</div><div>SET QUOTED_IDENTIFIER ON;</div><div>GO</div><div>CREATE FUNCTION [dbo].[F_SQLSERVER_SPLIT](@Long_str varchar(8000),@split_str varchar(100)) &nbsp; &nbsp;</div><div>RETURNS &nbsp;@tmp TABLE( &nbsp; &nbsp; &nbsp; &nbsp;</div><div>&nbsp; &nbsp; ID &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;inT &nbsp; &nbsp; IDENTITY PRIMARY KEY, &nbsp; &nbsp; &nbsp;</div><div>&nbsp; &nbsp; short_str &nbsp; varchar(8000) &nbsp; &nbsp;</div><div>) &nbsp; &nbsp;</div><div>AS &nbsp;&nbsp;</div><div>BEGIN &nbsp;&nbsp;</div><div>&nbsp; &nbsp; DECLARE @long_str_Tmp varchar(8000),@short_str varchar(8000),@split_str_length int &nbsp;&nbsp;</div><div>&nbsp; &nbsp; SET @split_str_length = LEN(@split_str) &nbsp; &nbsp;</div><div>&nbsp; &nbsp; IF CHARINDEX(@split_str,@Long_str)=1&nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;SET @long_str_Tmp=SUBSTRING(@Long_str,@split_str_length+1,LEN(@Long_str)-@split_str_length)</div><div>&nbsp; &nbsp; ELSE</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;SET @long_str_Tmp=@Long_str</div><div>&nbsp; &nbsp; IF CHARINDEX(REVERSE(@split_str),REVERSE(@long_str_Tmp))&gt;1 &nbsp; &nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; SET @long_str_Tmp=@long_str_Tmp+@split_str &nbsp; &nbsp;</div><div>&nbsp; &nbsp; ELSE &nbsp;&nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; SET @long_str_Tmp=@long_str_Tmp &nbsp; &nbsp;</div><div>&nbsp; &nbsp; IF CHARINDEX(@split_str,@long_str_Tmp)=0</div><div>&nbsp; &nbsp; &nbsp; &nbsp; Insert INTO @tmp select @long_str_Tmp&nbsp;</div><div>&nbsp; &nbsp; ELSE</div><div>&nbsp; &nbsp; &nbsp; &nbsp; BEGIN</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; WHILE CHARINDEX(@split_str,@long_str_Tmp)&gt;0 &nbsp; &nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; BEGIN &nbsp;&nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; SET @short_str=SUBSTRING(@long_str_Tmp,1,CHARINDEX(@split_str,@long_str_Tmp)-1) &nbsp; &nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; DECLARE @long_str_Tmp_LEN INT,@split_str_Position_END int &nbsp;&nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; SET @long_str_Tmp_LEN = LEN(@long_str_Tmp) &nbsp; &nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; SET @split_str_Position_END = LEN(@short_str)+@split_str_length &nbsp; &nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; SET @long_str_Tmp=REVERSE(SUBSTRING(REVERSE(@long_str_Tmp),1,@long_str_Tmp_LEN-@split_str_Position_END))</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; IF @short_str&lt;&gt;'' Insert INTO @tmp select @short_str &nbsp; &nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; END &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; END</div><div>&nbsp; &nbsp; RETURN &nbsp; &nbsp;&nbsp;</div><div>END</div><div>GO</div><div></div><img src ="http://www.blogjava.net/keweibo/aggbug/406147.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2013-11-08 16:57 <a href="http://www.blogjava.net/keweibo/articles/406147.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SQL Server 2000 十六进制与十进制互转（收藏）</title><link>http://www.blogjava.net/keweibo/articles/406146.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Fri, 08 Nov 2013 08:54:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/406146.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/406146.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/406146.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/406146.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/406146.html</trackback:ping><description><![CDATA[<br /><strong style="color: red;">十进制转十六进制</strong><br /><div>/****** Object: Function [dbo].[IntToHex] &nbsp; Script Date: 2013-10-30 16:22:15 ******/</div><div>USE [ZBP];</div><div>GO</div><div>SET ANSI_NULLS OFF;</div><div>GO</div><div>SET QUOTED_IDENTIFIER ON;</div><div>GO</div><div>CREATE FUNCTION [dbo].[IntToHex]</div><div>(@IntNum bigint)</div><div>RETURNS varchar(16)</div><div>AS</div><div>BEGIN</div><div>declare @Mods bigint, @res varchar(16)</div><div>set @res=''</div><div>while @IntNum &lt;&gt; 0</div><div>begin</div><div><span style="white-space:pre">	</span>set @Mods = @IntNum % 16</div><div><span style="white-space:pre">	</span>if @Mods &gt; 9</div><div><span style="white-space:pre">		</span>set @res = Char(Ascii('A')+@Mods-10)+@res</div><div><span style="white-space:pre">	</span>else</div><div><span style="white-space:pre">		</span>set @res = Cast(@Mods as varchar(4))+@res</div><div><span style="white-space:pre">	</span>set @IntNum = @IntNum/16</div><div>end</div><div>return @res</div><div></div><div>END</div><div>GO</div><div><span style="color: red;"><strong>十六进制转十进制</strong></span></div><div>/****** Object: Function [dbo].[HexToInt] &nbsp; Script Date: 2013-10-30 16:22:04 ******/</div><div>USE [ZBP];</div><div>GO</div><div>SET ANSI_NULLS OFF;</div><div>GO</div><div>SET QUOTED_IDENTIFIER ON;</div><div>GO</div><div>CREATE FUNCTION [dbo].[HexToInt]</div><div>(@hex varchar(100))</div><div>RETURNS int</div><div>AS</div><div>BEGIN</div><div>Declare @result bigint,@iPos int,@iTmp bigint,@iLoop int,@tmp varchar(16)</div><div>&nbsp; &nbsp; Set @tmp = '0123456789ABCDEF'</div><div>&nbsp; &nbsp; Select @result = 0,@iPos = 0</div><div>&nbsp; &nbsp; While @iPos &lt; &nbsp; Len(@hex)</div><div>&nbsp; &nbsp; Begin</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Set &nbsp;@iTmp =&nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;CharIndex(substring(@hex,Len(@hex) - @iPos,1),@tmp)-1</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Set @iLoop = 1</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; While @iLoop &lt;= @iPos and @iTmp &gt; 0</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; begin</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Set @iTmp = @iTmp * 16</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Set @iLoop = @iLoop + 1</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; end</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Set @result = @result + @iTmp</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Set @iLoop = @iLoop + 1 &nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Set @iPos = @iPos + 1</div><div>&nbsp; &nbsp; End</div><div></div><div>&nbsp; &nbsp; return @result</div><div>END</div><div>GO</div><div></div><img src ="http://www.blogjava.net/keweibo/aggbug/406146.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2013-11-08 16:54 <a href="http://www.blogjava.net/keweibo/articles/406146.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>存储过程递归调用时 游标的使用注意事项 </title><link>http://www.blogjava.net/keweibo/articles/399268.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Tue, 14 May 2013 09:17:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/399268.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/399268.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/399268.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/399268.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/399268.html</trackback:ping><description><![CDATA[<span style="color: red;">注意：</span><span style="color: red; font-family: arial, 'courier new', courier, 宋体, monospace; line-height: 24px; white-space: pre-wrap; background-color: #f1fedd;">必须</span><span style="background-color: #f1fedd; color: red; font-family: arial, 'courier new', courier, 宋体, monospace; line-height: 24px; white-space: pre-wrap;">把游标声明为局部的，即加上local</span><br /><br /><div>CREATE PROCEDURE [dbo].[p_expand_k3_bom]</div><div>@p_itemID int, @p_levelID int</div><div>WITH EXEC AS CALLER</div><div>AS</div><div>declare @v_itemID int</div><div>declare @v_levelID int</div><div>declare @v_itemNO varchar(20)</div><div>declare @v_itemName varchar(200)</div><div>declare @v_itemModel varchar(200)</div><div>declare @v_note1 varchar(20)</div><div>declare cursor_bom CURSOR <strong style="color: red;">LOCAL </strong>FOR select b.FItemID,c.FShortNumber, c.FName, c.FModel, &nbsp;b.FNote1</div><div>&nbsp; from AIS20120110144135.dbo.ICBOM a, AIS20120110144135.dbo.ICBOMChild b, AIS20120110144135.dbo.t_ICItem c</div><div>&nbsp; where a.FInterID = b.FInterID</div><div>&nbsp; and b.FItemID = c.FItemID</div><div>&nbsp; and a.FInterID = (select top 1 FInterID from AIS20120110144135.dbo.ICBOM where FItemID = @p_itemID)</div><div>&nbsp; and a.FItemID = @p_itemID</div><div></div><div>set @v_levelID = @p_levelID+1</div><div>open cursor_bom&nbsp;</div><div>fetch next from cursor_bom into @v_itemID, @v_itemNO, @v_itemName, @v_itemModel, @v_note1</div><div>while (@@FETCH_STATUS = 0)</div><div>&nbsp; begin</div><div>&nbsp; &nbsp; INSERT INTO k3_bom_info</div><div>&nbsp; &nbsp; &nbsp; (level_id, item_id, item_no, item_name, item_model, note_1)&nbsp;</div><div>&nbsp; &nbsp; VALUES (@v_levelID, @v_itemID, @v_itemNO, @v_itemName, @v_itemModel, @v_note1)</div><div>&nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; exec p_expand_k3_bom @v_itemID, @v_levelID</div><div>&nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; fetch next from cursor_bom into @v_itemID, @v_itemNO, @v_itemName, @v_itemModel, @v_note1</div><div>&nbsp; end</div><div></div><div>close cursor_bom</div><div>deallocate cursor_bom</div><div>GO</div><div></div><img src ="http://www.blogjava.net/keweibo/aggbug/399268.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2013-05-14 17:17 <a href="http://www.blogjava.net/keweibo/articles/399268.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Openbravo Developers_Guide Notes</title><link>http://www.blogjava.net/keweibo/articles/398701.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Fri, 03 May 2013 01:23:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/398701.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/398701.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/398701.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/398701.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/398701.html</trackback:ping><description><![CDATA[<h1>How to create a Table</h1><div><u>http://wiki.openbravo.com/wiki/How_to_create_a_Table<br /></u></div><br />The new table must include the <em><strong>AD_Client_ID</strong></em>, <em><strong>AD_Org_ID</strong></em>, <em><strong>IsActive</strong></em>, <em><strong>Created</strong></em>, <em><strong>CreatedBy</strong></em>, <em><strong>Updated</strong></em> and <em><strong>UpdatedBy</strong></em> fields that are <strong>mandatory</strong> and required for security and auditory purposes of the application.&nbsp;<br /><br />Each table must have at least one column marked as an identifier. The  actual values of identifier columns later get concatenated to be shown  to the user as a representation of a particular record (see the link to  the Sales Order within the Sales Invoice window). These identifiers will  also be used to construct dropdown lists of records of that particular  table. By default all columns with column name <em>Name</em> are set as an identifier. In case there is no column with this <em>Name</em>, no identifier is set and needs to be done so manually or compilation will fail.&nbsp;<br /><br /><span style="background-color: #f7f8ff;"> <strong>NOTE:</strong> The columns that are named <em><strong>line</strong></em> or <em><strong>seqNo</strong></em> are used to contain the sequence number of a record (i.e. the number of a line in an invoice). They take a default value like: <p>@SQL=SELECT COALESCE(MAX(ColumnName),0)+10 AS DefaultValue FROM TableName WHERE xxParentColumn=@xxParentColumn@  </p><p>The <em>WHERE</em> part of this clause needs to be replaced with  the required values. The code that should appear here is the name of the  column which links with the <em>id</em> of the parent one. For example,  each record of the C_InvoiceLine belongs to a particular C_Invoice  record and they are all sequenced. C_Invoice is the parent table for the  lines saved in <em>C_InvoiceLine</em>. This table has a column named line and the default value that it takes is: </p><p>@SQL=SELECT COALESCE(MAX(LINE),0)+10 AS DefaultValue FROM <strong>C_INVOICELINE</strong> WHERE <strong>C_INVOICE_ID=@C_INVOICE_ID@<br /><br /></strong></p><h1 class="pagetitle">How to add Columns to a Table</h1><div><u>http://wiki.openbravo.com/wiki/How_to_add_Columns_to_a_Table</u></div><p><br />These changes can be done in two different locations:
</p>
<ol><li> Add columns to the <strong>original</strong> module (dbprefix <strong>HT</strong>)
</li><li> Create a <strong>second</strong> module (dbprefix <strong>HT2</strong>) which adds the columns to the first module
</li></ol>
<p>The first option can be chosen if the original module author wants to
 add more columns to his/her module. The second option is possible for 
anyone as the columns are added by a new module to the existing one 
which is not changed directly.
</p><p>The main difference between these two methods is the names which 
need to be chosen for the columns to comply with the modularity naming 
rules.
</p>
<ol><li> Adding column to same module: Any valid column name can be picked
</li><li> Via second module: New column name must comply to the pattern <strong>EM_&lt;DBPREFIX&gt;_</strong> where <em>&lt;DBPREFIX&gt; must be the dbprefix if the new module contaning the column to be added. In this example: <strong>EM_HT2_</strong></em></li></ol></span><h1 class="pagetitle">How to add a Constraint</h1><div><u>http://wiki.openbravo.com/wiki/How_to_add_a_Constraint<br /><br /></u></div><p>In the <strong>Application Dictionary || Message</strong> window create a new record using the following details: </p> <ul><li> <strong>Module</strong> <em>Openbravo Howtos 2</em> as this is the module containing the constraint also. </li><li> <strong>Search key</strong>: <strong>The search key must be exactly the same as the constraint's one</strong>, in this case <em>em_ht2_ht_salary_dates_chk</em> as this is the link between the constraint and the message. </li></ul> <ul><li> <strong>Message type</strong>: Depending on the type the UI for the  message box will be different (green for success, yellow for  warning...), in our case we want a red error message box, so we select <em>Error</em>. </li><li> <strong>Message text</strong>: It is the user friendly message that will be displayed inside the message box. So let's enter: <em>The Valid To date may not be before the Valid From date</em>.&nbsp;</li></ul><span style="background-color: #f7f8ff;"><p>&nbsp;<br /><h3> <span id="Creating_a_new_instance_of_a_Business_Object">&nbsp;Creating a new instance of a Business Object </span></h3> <p><div>http://wiki.openbravo.com/wiki/How_to_work_with_the_Data_Access_Layer#A_.27Hello_World.27_Example</div><br />A business object may never be created using the Java new operator. All business objects should be created using the <a href="https://code.openbravo.com/erp/devel/pi/file/d128f84ed546/src/org/openbravo/base/provider/OBProvider.java"  text"="" rel="nofollow">OBProvider</a> factory class: </p> <pre>&nbsp;  <span style="color: #808080; font-style: italic;">// create the object through the factory</span>   <span style="font-weight: bold;">final</span> Category bpg = OBProvider.<span style="color: #006600;">getInstance</span><span style="color: #66cc66;">(</span><span style="color: #66cc66;">)</span>.<span style="color: #006600;">get</span><span style="color: #66cc66;">(</span>Category.<span style="font-weight: bold;">class</span><span style="color: #66cc66;">)</span>;</pre> <p>Hibernate will detect that a business object is new when: </p> <ul><li> the id of the business object is not set </li><li> when the flag newOBObject is set to true explicitly </li></ul> <p>So if you want to create a new business object with a specific id (by  calling setId(...)) then you explicitly need to call  businessObject.setNewOBObject(true). Otherwise, Hibernate will throw an  exception ('count of batch update operation....').&nbsp;</p><br /></p></span><img src ="http://www.blogjava.net/keweibo/aggbug/398701.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2013-05-03 09:23 <a href="http://www.blogjava.net/keweibo/articles/398701.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>redhat 9.0,提示Determining IP information for eth0... failed; no link present. Check cable?</title><link>http://www.blogjava.net/keweibo/articles/398679.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Thu, 02 May 2013 08:27:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/398679.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/398679.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/398679.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/398679.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/398679.html</trackback:ping><description><![CDATA[<span style="font-family: Geneva, Arial, Helvetica, sans-serif; line-height: 24px; background-color: #f9f9f9;">redhat 9.0,提示Determining IP information for eth0... failed; no link present. Check cable?无法激活网络设备eth0</span><br style="font-family: Geneva, Arial, Helvetica, sans-serif; line-height: 24px; background-color: #f9f9f9;" /><span style="font-family: Geneva, Arial, Helvetica, sans-serif; line-height: 24px; background-color: #f9f9f9;">我搜的相关解决方案为：&nbsp;</span><br style="font-family: Geneva, Arial, Helvetica, sans-serif; line-height: 24px; background-color: #f9f9f9;" /><span style="font-family: Geneva, Arial, Helvetica, sans-serif; line-height: 24px; background-color: #f9f9f9;">到/etc/sysconfig/network-scripts/ifcfg-eth</span><n style="font-family: Geneva, Arial, Helvetica, sans-serif; line-height: 24px; background-color: #f9f9f9;">&nbsp;<br />/etc/sysconfig/networking/devices/ifcfg-eth<n>&nbsp;其中<n>表示Ethernet adapter的标识数字，一般为0。当为零的时候，就是&nbsp;<br />/etc/sysconfig/network-scripts/ifcfg-eth0&nbsp;<br />/etc/sysconfig/networking/devices/ifcfg-eth0 这两个文件中加入&nbsp;<br /><br />check_link_down () {&nbsp;<br />return 1;&nbsp;<br />}&nbsp;</n></n></n><img src ="http://www.blogjava.net/keweibo/aggbug/398679.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2013-05-02 16:27 <a href="http://www.blogjava.net/keweibo/articles/398679.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>具体分析tftp server配置的步骤(转)</title><link>http://www.blogjava.net/keweibo/articles/398387.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Thu, 25 Apr 2013 06:57:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/398387.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/398387.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/398387.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/398387.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/398387.html</trackback:ping><description><![CDATA[<p style="margin: 10px 0px; padding: 0px; color: #333333; background-color: #f8f8f8; text-indent: 28px; font-family: 宋体; line-height: 28px;">转自：<a href="http://network.51cto.com/art/201009/225534.htm">http://network.51cto.com/art/201009/225534.htm<br /></a><br />在Linux系统中，我们依然可以进行<a href="http://network.51cto.com/art/201009/225533.htm" style="color: #004276;">tftp server配置</a>的操作。可能对于熟悉窗口操作的朋友，对于命令操作有些不熟悉，没关系这里我们就来讲解一下Linux 下的tftp-server配置的命令操作。TFTP是用来下载远程文件的最简单网络协议,它其于UDP协议而实现.嵌入式linux的tftp开发环境包括两个方面:</p><p style="margin: 10px 0px; padding: 0px; color: #333333; background-color: #f8f8f8; text-indent: 28px; font-family: 宋体; line-height: 28px;">一是linux服务器端的tftp-server支持,</p><p style="margin: 10px 0px; padding: 0px; color: #333333; background-color: #f8f8f8; text-indent: 28px; font-family: 宋体; line-height: 28px;">二是嵌入式目标系统的tftp-client支持.</p><p style="margin: 10px 0px; padding: 0px; color: #333333; background-color: #f8f8f8; text-indent: 28px; font-family: 宋体; line-height: 28px;">因为u-boot本身内置支持tftp-client,所以嵌入式目标系统端就不用配置了.</p><p style="margin: 10px 0px; padding: 0px; color: #333333; background-color: #f8f8f8; text-indent: 28px; font-family: 宋体; line-height: 28px;">下面就详细介绍一下linux服务器端tftp server配置.在redhat 9.0的第三张光盘中,有tftp-server的安装rpm包.（1）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 安装</p><p style="margin: 10px 0px; padding: 0px; color: #333333; background-color: #f8f8f8; text-indent: 28px; font-family: 宋体; line-height: 28px;">#mount &#8211;t iso9660 /dev/hdc /mnt/cdrom&nbsp;&nbsp;&nbsp; //挂载光盘</p><p style="margin: 10px 0px; padding: 0px; color: #333333; background-color: #f8f8f8; text-indent: 28px; font-family: 宋体; line-height: 28px;">#rpm -ivh tftp-server-0.32-4.i386.rpm&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //安装</p><p style="margin: 10px 0px; padding: 0px; color: #333333; background-color: #f8f8f8; text-indent: 28px; font-family: 宋体; line-height: 28px;">#umount /mnt/cdrom&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //卸载光盘</p><p style="margin: 10px 0px; padding: 0px; color: #333333; background-color: #f8f8f8; text-indent: 28px; font-family: 宋体; line-height: 28px;">（2）修改文件在linux下,不管使用的是哪一种super-server,inetd或者xinetd,默认情况下TFTP服务是禁用的,所以要修改文件来开启服务.</p><p style="margin: 10px 0px; padding: 0px; color: #333333; background-color: #f8f8f8; text-indent: 28px; font-family: 宋体; line-height: 28px;">根据（1）的安装方法,可以修改文件/etc/xinetd.d/tftp.主要是设置TFTP服务器的根目录,开启服务.</p><p style="margin: 10px 0px; padding: 0px; color: #333333; background-color: #f8f8f8; text-indent: 28px; font-family: 宋体; line-height: 28px;">修改后的文件如下:</p><p style="margin: 10px 0px; padding: 0px; color: #333333; background-color: #f8f8f8; text-indent: 28px; font-family: 宋体; line-height: 28px;">service tftp {</p><p style="margin: 10px 0px; padding: 0px; color: #333333; background-color: #f8f8f8; text-indent: 28px; font-family: 宋体; line-height: 28px;">socket_type&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =dgram</p><p style="margin: 10px 0px; padding: 0px; color: #333333; background-color: #f8f8f8; text-indent: 28px; font-family: 宋体; line-height: 28px;">protocol&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =udp</p><p style="margin: 10px 0px; padding: 0px; color: #333333; background-color: #f8f8f8; text-indent: 28px; font-family: 宋体; line-height: 28px;">wait&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =yes</p><p style="margin: 10px 0px; padding: 0px; color: #333333; background-color: #f8f8f8; text-indent: 28px; font-family: 宋体; line-height: 28px;">user&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =root</p><p style="margin: 10px 0px; padding: 0px; color: #333333; background-color: #f8f8f8; text-indent: 28px; font-family: 宋体; line-height: 28px;">server&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =/usr/sbin/in.tftpd</p><p style="margin: 10px 0px; padding: 0px; color: #333333; background-color: #f8f8f8; text-indent: 28px; font-family: 宋体; line-height: 28px;">server_args&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =-s /home/app -c</p><p style="margin: 10px 0px; padding: 0px; color: #333333; background-color: #f8f8f8; text-indent: 28px; font-family: 宋体; line-height: 28px;">disable&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =no</p><p style="margin: 10px 0px; padding: 0px; color: #333333; background-color: #f8f8f8; text-indent: 28px; font-family: 宋体; line-height: 28px;">per_source&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =11</p><p style="margin: 10px 0px; padding: 0px; color: #333333; background-color: #f8f8f8; text-indent: 28px; font-family: 宋体; line-height: 28px;">cps&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =100 2</p><p style="margin: 10px 0px; padding: 0px; color: #333333; background-color: #f8f8f8; text-indent: 28px; font-family: 宋体; line-height: 28px;">flags&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =IPv4</p><p style="margin: 10px 0px; padding: 0px; color: #333333; background-color: #f8f8f8; text-indent: 28px; font-family: 宋体; line-height: 28px;">}</p><p style="margin: 10px 0px; padding: 0px; color: #333333; background-color: #f8f8f8; text-indent: 28px; font-family: 宋体; line-height: 28px;">说明:修改项server_args= -s&nbsp;&nbsp;&nbsp;&nbsp; &lt;path&gt;&nbsp;&nbsp;&nbsp; -c,其中&lt;path&gt;处可以改为你的tftp server配置的根目录,参数-s指定chroot,-c指定了可以创建文件.</p><p style="margin: 10px 0px; padding: 0px; color: #333333; background-color: #f8f8f8; text-indent: 28px; font-family: 宋体; line-height: 28px;">（3）创建tftp根目录,关闭防火墙,启动tftp-server.</p><p style="margin: 10px 0px; padding: 0px; color: #333333; background-color: #f8f8f8; text-indent: 28px; font-family: 宋体; line-height: 28px;">#mkdir /home/app</p><p style="margin: 10px 0px; padding: 0px; color: #333333; background-color: #f8f8f8; text-indent: 28px; font-family: 宋体; line-height: 28px;">#chmod o+w&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /home/app</p><p style="margin: 10px 0px; padding: 0px; color: #333333; background-color: #f8f8f8; text-indent: 28px; font-family: 宋体; line-height: 28px;">#/etc/init.d/iptables stop&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //关闭防火墙</p><p style="margin: 10px 0px; padding: 0px; color: #333333; background-color: #f8f8f8; text-indent: 28px; font-family: 宋体; line-height: 28px;">#service xinetd restart&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //重启 xinetd 服务</p><p style="margin: 10px 0px; padding: 0px; color: #333333; background-color: #f8f8f8; text-indent: 28px; font-family: 宋体; line-height: 28px;">重启xinetd服务,因为TFTP服务受控与xinetd, xinetd是管服务的服务,它是不开端口的.</p><p style="margin: 10px 0px; padding: 0px; color: #333333; background-color: #f8f8f8; text-indent: 28px; font-family: 宋体; line-height: 28px;">验证一下TFTP是否起来了:</p><p style="margin: 10px 0px; padding: 0px; color: #333333; background-color: #f8f8f8; text-indent: 28px; font-family: 宋体; line-height: 28px;"># netstat -nlp</p><p style="margin: 10px 0px; padding: 0px; color: #333333; background-color: #f8f8f8; text-indent: 28px; font-family: 宋体; line-height: 28px;">Active Internet connections (only servers)</p><p style="margin: 10px 0px; padding: 0px; color: #333333; background-color: #f8f8f8; text-indent: 28px; font-family: 宋体; line-height: 28px;">Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name</p><p style="margin: 10px 0px; padding: 0px; color: #333333; background-color: #f8f8f8; text-indent: 28px; font-family: 宋体; line-height: 28px;">tcp 0 0 0.0.0.0:32768 0.0.0.0:* LISTEN 3122/rpc.statd</p><p style="margin: 10px 0px; padding: 0px; color: #333333; background-color: #f8f8f8; text-indent: 28px; font-family: 宋体; line-height: 28px;">tcp 0 0 127.0.0.1:32781 0.0.0.0:* LISTEN 4035/xinetd</p><p style="margin: 10px 0px; padding: 0px; color: #333333; background-color: #f8f8f8; text-indent: 28px; font-family: 宋体; line-height: 28px;">tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 3103/portmap</p><p style="margin: 10px 0px; padding: 0px; color: #333333; background-color: #f8f8f8; text-indent: 28px; font-family: 宋体; line-height: 28px;">tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 3324/httpd</p><p style="margin: 10px 0px; padding: 0px; color: #333333; background-color: #f8f8f8; text-indent: 28px; font-family: 宋体; line-height: 28px;">tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 3255/sshd</p><p style="margin: 10px 0px; padding: 0px; color: #333333; background-color: #f8f8f8; text-indent: 28px; font-family: 宋体; line-height: 28px;">tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 3213/cupsd</p><p style="margin: 10px 0px; padding: 0px; color: #333333; background-color: #f8f8f8; text-indent: 28px; font-family: 宋体; line-height: 28px;">tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 3295/sendmail: acce</p><p style="margin: 10px 0px; padding: 0px; color: #333333; background-color: #f8f8f8; text-indent: 28px; font-family: 宋体; line-height: 28px;">tcp 0 0 127.0.0.1:6010 0.0.0.0:* LISTEN 3415/0</p><p style="margin: 10px 0px; padding: 0px; color: #333333; background-color: #f8f8f8; text-indent: 28px; font-family: 宋体; line-height: 28px;">tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 3324/httpd</p><p style="margin: 10px 0px; padding: 0px; color: #333333; background-color: #f8f8f8; text-indent: 28px; font-family: 宋体; line-height: 28px;">udp 0 0 0.0.0.0:32768 0.0.0.0:* 3122/rpc.statd</p><p style="margin: 10px 0px; padding: 0px; color: #333333; background-color: #f8f8f8; text-indent: 28px; font-family: 宋体; line-height: 28px;">udp 0 0 0.0.0.0:69 0.0.0.0:* 4035/xinetd&nbsp;&nbsp; ;</p><p style="margin: 10px 0px; padding: 0px; color: #333333; background-color: #f8f8f8; text-indent: 28px; font-family: 宋体; line-height: 28px;">可以看到69端口已经打开</p><p style="margin: 10px 0px; padding: 0px; color: #333333; background-color: #f8f8f8; text-indent: 28px; font-family: 宋体; line-height: 28px;">udp 0 0 0.0.0.0:69 0.0.0.0:* 4012/in.tftpd</p><p style="margin: 10px 0px; padding: 0px; color: #333333; background-color: #f8f8f8; text-indent: 28px; font-family: 宋体; line-height: 28px;">udp 0 0 0.0.0.0:111 0.0.0.0:* 3103/portmap</p><p style="margin: 10px 0px; padding: 0px; color: #333333; background-color: #f8f8f8; text-indent: 28px; font-family: 宋体; line-height: 28px;">udp 0 0 0.0.0.0:754 0.0.0.0:* 3122/rpc.statd</p><p style="margin: 10px 0px; padding: 0px; color: #333333; background-color: #f8f8f8; text-indent: 28px; font-family: 宋体; line-height: 28px;">udp 0 0 0.0.0.0:631 0.0.0.0:* 3213/cupsd</p><p style="margin: 10px 0px; padding: 0px; color: #333333; background-color: #f8f8f8; text-indent: 28px; font-family: 宋体; line-height: 28px;">这样,tftp server配置的启动步骤就完成了。</p><p style="margin: 10px 0px; padding: 0px; color: #333333; background-color: #f8f8f8; text-indent: 28px; font-family: 宋体; line-height: 28px;">你可以登陆本机测试以下,命令如下:</p><p style="margin: 10px 0px; padding: 0px; color: #333333; background-color: #f8f8f8; text-indent: 28px; font-family: 宋体; line-height: 28px;">#tftp&nbsp;&nbsp;&nbsp;&nbsp; your-ip-address</p><p style="margin: 10px 0px; padding: 0px; color: #333333; background-color: #f8f8f8; text-indent: 28px; font-family: 宋体; line-height: 28px;">tftp&gt;get &lt;download file&gt;</p><p style="margin: 10px 0px; padding: 0px; color: #333333; background-color: #f8f8f8; text-indent: 28px; font-family: 宋体; line-height: 28px;">tftp&gt;put &lt;upload file&gt;</p><p style="margin: 10px 0px; padding: 0px; color: #333333; background-color: #f8f8f8; text-indent: 28px; font-family: 宋体; line-height: 28px;">tftp&gt;q</p><img src ="http://www.blogjava.net/keweibo/aggbug/398387.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2013-04-25 14:57 <a href="http://www.blogjava.net/keweibo/articles/398387.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>VC：nafxcwd.lib(dllmodul.obj) : error LNK2005: _DllMain@12..."错误! （转）</title><link>http://www.blogjava.net/keweibo/articles/396482.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Fri, 15 Mar 2013 07:04:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/396482.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/396482.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/396482.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/396482.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/396482.html</trackback:ping><description><![CDATA[<div>朋友编写一个dll,编译时总出现</div>
<div>"nafxcwd.lib(dllmodul.obj) : error LNK2005: _DllMain@12..."错误!</div>
<div>后发现是,<span style="color: red"><strong>其创建dll时选择的时不使用MFC,而后来工程中又添加了与MFC相关的东西</strong></span>.才引起上述问题.</div>
<div>采用如下步骤解决此问题:</div>
<div>1.将工程设置中改为"动态使用MFC"</div>
<div>2.<strong>到C++设置页中,看到Preprocessor Definitions编辑框中同时存在_USRDLL和_AFXDLL, 删除_USRDLL即可</strong>.<br /><br />转自：<a href="http://blog.csdn.net/train_z/article/details/3118754">http://blog.csdn.net/train_z/article/details/3118754</a><br /><br />确认解决了问题，但步骤1，我使用的是&#8220;静态MFC&#8221;</div><img src ="http://www.blogjava.net/keweibo/aggbug/396482.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2013-03-15 15:04 <a href="http://www.blogjava.net/keweibo/articles/396482.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>VC: “LoadLibraryW”: 不能将参数 1 从“const char *”转换为“LPCWSTR”</title><link>http://www.blogjava.net/keweibo/articles/396408.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Wed, 13 Mar 2013 10:59:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/396408.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/396408.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/396408.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/396408.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/396408.html</trackback:ping><description><![CDATA[<p>动态调用DLL<br />通过<br />LoadLibrary<br />GetProcAddress<br />FreeLibrary实现。</p>
<p>原因&nbsp;：工程只支持UNICODE字符</p>
<p>解决方法：</p>
<p><strong style="color: red">工程属性-&gt;配置属性&#8211;&gt;常规&#8212;&gt;字符集&#8212;-&gt;使用多字节符字符集</strong></p>
<p>&nbsp;</p><img src ="http://www.blogjava.net/keweibo/aggbug/396408.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2013-03-13 18:59 <a href="http://www.blogjava.net/keweibo/articles/396408.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>c++调用c#的dll（转） </title><link>http://www.blogjava.net/keweibo/articles/396322.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Tue, 12 Mar 2013 07:13:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/396322.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/396322.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/396322.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/396322.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/396322.html</trackback:ping><description><![CDATA[<p>一、使用/clr编译MFC可执行文件或规则C# DLL函数.<br />&nbsp;&nbsp;&nbsp; 1、打开&#8220;项目属性&#8221;对话框，方法是右键单击&#8220;解决方案资源管理器&#8221;中的项目并选择&#8220;属性&#8221;。<br />&nbsp;&nbsp;&nbsp; 2、展开&#8220;配置属性&#8221;旁边的节点并选择&#8220;常规&#8221;。在右侧窗格中的&#8220;项目默认值&#8221;下，将&#8220;公共语言运行库支持&#8221;设置为<strong>&#8220;公共语言运行库支持（/clr）&#8221;。<br /></strong>&nbsp;&nbsp;&nbsp; 3、在相同的窗格中，确保将&#8220;MFC的使用&#8221;设置为&#8220;<strong>在共享DLL中使用MFC</strong>&#8221;。<br />&nbsp;&nbsp;&nbsp; 4、在&#8220;配置属性&#8221;下，展开&#8220;C/C++&#8221;旁边的节点并选择&#8220;常规&#8221;。请确保将&#8220;调试信息格式&#8221;设置为&#8220;程序数据库/Zi&#8221;（而不是&#8220;/ZI&#8221;）。<br />&nbsp;&nbsp;&nbsp; 5、在&#8220;配置属性&#8221;下，选择&#8220;C/C++&#8221;，然后选择&#8220;代码生成&#8221;。请确保将&#8220;运行时库&#8221;设置为&#8220;多线程调试DLL（/MDd）&#8221;或&#8220;多线程DLL（/MD）&#8221;之一。<br />二、在代码引用需要的dll.<br />&nbsp;using &lt;mscorlib.dll&gt;.&nbsp; <br />&nbsp;<strong>using "DownloaFiles.dll"&nbsp;&nbsp; //换成需要的dll文件。</strong>&nbsp; <br />&nbsp;using namespace System； <br />&nbsp;using namespace ADMessage_test；&nbsp; //换成dll中类所使用的namespace. <br />三、在C# DLL函数调用代码前加入#pragma managed<br />&nbsp;&nbsp;&nbsp; 这是manage和unmanage混合编程在MFC下的一种实现方式。<br />&nbsp;&nbsp;&nbsp; 以上介绍C++调用C# DLL函数，希望对你有所帮助。</p>
<p>四 、几点要记住：</p>
<p>　　1 使用#using引用C# DLL，而不是#include.我就是想当然的使用了后者，所以浪费了一上午的时间；</p>
<p>　　2 别忘了using namespace CSLib；</p>
<p>　　3 使用C++/clr语法，采用正确的访问托管对象，即：使用帽子&#8216;^&#8217;，而不是星星&#8216;*&#8217;。<br /><br /><br />PS：附上自己成功运行C++代码<br /></p>
<p>#include "stdafx.h"<br />#include &lt;iostream&gt;<br />//#using "..\..\SFCSDLL.dll" //右击项目--&gt;引用...，添加新引用，将DLL添加到项目中，可以不用此行代码</p>
<p>using namespace std;<br />using namespace SFCSDLL;</p>
<p>int _tmain(int argc, _TCHAR* argv[])<br />{<br />&nbsp;Class1 ^c = gcnew Class1();</p>
<p>&nbsp;c-&gt;SFCSDLL_Create_Connection("127.0.0.1", 0, 0, 0, 0);<br />&nbsp;c-&gt;SFCSDLL_Get_DLLVersion();<br />&nbsp;c-&gt;SFCSDLL_Close_Connection();</p>
<p>&nbsp;cout&lt;&lt;"end...";<br />&nbsp;system("pause");<br />&nbsp;return 0;<br />}</p>
<p>&nbsp;</p><img src ="http://www.blogjava.net/keweibo/aggbug/396322.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2013-03-12 15:13 <a href="http://www.blogjava.net/keweibo/articles/396322.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>javascript 计算日期相差的天数</title><link>http://www.blogjava.net/keweibo/articles/395722.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Tue, 26 Feb 2013 02:00:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/395722.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/395722.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/395722.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/395722.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/395722.html</trackback:ping><description><![CDATA[<font face="Verdana">&lt;html&gt;<br />&nbsp;&lt;head&gt;<br />&nbsp;&nbsp;&lt;script type="text/javascript"&gt;<br />&nbsp;&nbsp;&nbsp;function moreThanOneMonth(dt)<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;var s1=new Date(dt.replace(/-/g, "/")); //日期格式为yyyy-mm-dd转换成yyyy/mm/dd<br />&nbsp;&nbsp;&nbsp;&nbsp;var s2=new Date();<br />&nbsp;&nbsp;&nbsp;&nbsp;var time= s2.getTime() - s1.getTime();&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;var days = parseInt(time / (1000 * 60 * 60 * 24));<br />&nbsp;&nbsp;&nbsp;&nbsp;if(days &gt; 30)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return true;<br />&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return false;<br />&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;function load(dt)<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;if( checkDate(dt) )<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert("days &gt; 30");<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert("days &lt; 30");<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&lt;/script&gt;<br />&nbsp;&lt;/head&gt;<br />&nbsp;&lt;body onLoad="load('2013-01-01')"&gt;<br />&nbsp;&lt;/body&gt;<br />&lt;/html&gt;</font><img src ="http://www.blogjava.net/keweibo/aggbug/395722.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2013-02-26 10:00 <a href="http://www.blogjava.net/keweibo/articles/395722.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C# DataGridView显示行号的方法</title><link>http://www.blogjava.net/keweibo/articles/392802.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Tue, 11 Dec 2012 06:54:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/392802.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/392802.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/392802.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/392802.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/392802.html</trackback:ping><description><![CDATA[<div id="content" class="content mod-cs-content text-content clearfix">
<div>
<p><span>网上最常见的做法是用</span><span>DataGridView</span><span>的</span><span>RowPostPaint</span><span>事件在</span><span>RowHeaderCell</span><span>中绘制行号：</span></p>
<p><span>private</span><span>void</span><span>dataGridView1_RowPostPaint(</span><span>object</span><span>sender,&nbsp;DataGridViewRowPostPaintEventArgs&nbsp;e)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>try</span><span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.Graphics.DrawString((e.RowIndex&nbsp;+&nbsp;1).ToString(),&nbsp;e.InheritedRowStyle.Font,&nbsp;new&nbsp;SolidBrush(Color.CadetBlue),&nbsp;e.RowBounds.Location.X&nbsp;+&nbsp;15,&nbsp;e.RowBounds.Location.Y&nbsp;+&nbsp;5);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>catch</span><span>(Exception&nbsp;ex)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox.Show(</span><span>"</span><span>添加行号时发生错误，错误信息：</span><span>"</span><span>+</span><span>ex.Message,&nbsp;</span><span>"</span><span>操作失败</span><span>"</span><span>);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span></p>
<p><strong><span>但是这种方法在大数据量的时候性能比较差，每次滚动数据都会触发</span><span>RowPostPaint</span><span>事件。</span></strong></p></div></div><img src ="http://www.blogjava.net/keweibo/aggbug/392802.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2012-12-11 14:54 <a href="http://www.blogjava.net/keweibo/articles/392802.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>VS2008 自动生成属性的get、set </title><link>http://www.blogjava.net/keweibo/articles/391417.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Fri, 16 Nov 2012 01:34:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/391417.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/391417.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/391417.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/391417.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/391417.html</trackback:ping><description><![CDATA[<div id="article_content" class="article_content">
<p>在VS2008里，也可以像Eclipse那样自动生成get 、set方法。<br /><br />下面是两个具体操作的方法：<br /></p>
<p>1、在编写的字段上单击右键-----&gt;重构-------&gt;封装字段<br /></p>
<p>2、在空白行处，输入&#8220;prop&#8221;再按Tab键</p></div><img src ="http://www.blogjava.net/keweibo/aggbug/391417.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2012-11-16 09:34 <a href="http://www.blogjava.net/keweibo/articles/391417.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何查看SQL SERVER补丁的版本</title><link>http://www.blogjava.net/keweibo/articles/391210.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Mon, 12 Nov 2012 08:19:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/391210.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/391210.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/391210.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/391210.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/391210.html</trackback:ping><description><![CDATA[<p>原文：<a href="http://hi.baidu.com/einsteinalbert/item/b0366529705c5cfb51fd87ee">http://hi.baidu.com/einsteinalbert/item/b0366529705c5cfb51fd87ee</a><br /><br />有两种方法：<br /><br /><strong>第一步：使用SQL语句查询</strong><br /><br />select @@version<br /><br />查询结果如下：</p>
<p>Microsoft SQL Server&nbsp;&nbsp; 2000 - 8.00.2039 (Intel X86) <br />&nbsp;&nbsp; May&nbsp;&nbsp; 3 2005 23:18:38 <br />&nbsp;&nbsp; Copyright (c) 1988-2003 Microsoft Corporation<br />&nbsp;&nbsp; Personal Edition on Windows NT 5.1 (Build 2600: Service Pack 2)</p><br />其实在C:\Program Files\Microsoft SQL Server\MSSQL\Binn\sqlservr.exe<br />点击鼠标右键查看版本也能得到，不过信息比较简单而已。8.00.2039就代表安装的SQL Server的版本了。对应以下的表格，可以查出来具体对应的补丁版本。<strong style="color: #ff0000">8.00.2039表示安装了SP4，8.00.760表示安装了SP3</strong>。<br /><br /><strong>第二步：对照表格查找具体的补丁版本</strong><br /><br /><strong>SQL Server Versions</strong><br /><br />@Version SQL Server Version Released <br /><br />6.50.201 SQL Server 6.5 RTM <br />6.50.213 SQL Server 6.5 with Service Pack 1 <br />6.50.240 SQL Server 6.5 with Service Pack 2 <br />6.50.258 SQL Server 6.5 with Service Pack 3 <br />6.50.281 SQL Server 6.5 with Service Pack 4 <br />6.50.415 SQL Server 6.5 with Service Pack 5 <br />6.50.416 SQL Server 6.5 with Service Pack 5a <br />7.00.623 SQL Server 7.0 / MSDE 1.0 RTM <br />7.00.699 SQL Server 7.0 SP1 July 1999 <br />7.00.842 SQL Server 7.0 SP2 March 20th, 2000 <br />7.00.961 SQL Server 7.0 SP3 December 15th, 2000 <br />7.00.1063 SQL Server 7.0 SP4 <br />8.00.194 SQL Server 2000 RTM <br />8.00.384 SQL Server 2000 SP1 <br />8.00.534 SQL Server 2000 SP2 November 30th, 2001 <br /><strong style="color: #ff0000">8.00.760 SQL Server 2000 SP3 <br />8.00.2039 SQL Server 2000 SP4</strong><strong><br /></strong><br />更多的版本对照表：<br /><br /><strong>For SQL Server 8</strong><br /><br />Main Releases <br />@@version Version and Service Pack <br />8.00.2039 Service Pack 4<br />8.00.760 Service Pack 3 <br />8.00.534 Service Pack 2 <br />8.00.384 Service Pack 1 <br />8.00.194 RTM <br /><br />All Releases <br />@@version Version and Service Pack <br />8.00.2039 Service Pack 4<br />8.00.760 Service Pack 3 <br />8.00.686 SP 2 + Q316333 <br />8.00.679 SP 2 + Q316333 <br />8.00.665 SP 2 + Q316333 <br />8.00.655 SP 2 + Q316333 <br />8.00.650 SP 2 + Q316333 <br />8.00.644 SP 2 + Q324186 <br />8.00.608 SP 2 + Q316333/Q356326/Q356938 <br />8.00.578 SP 2 + Q316333 <br />8.00.534 Service Pack 2 <br />8.00.532 Service Pack 2 Beta <br />8.00.452 SP 1 + Q308547 <br />8.00.444 SP 1 + Q308547/Q307655 <br />8.00.443 SP 1 + Q307538 <br />8.00.428 SP 1 + Q304850 <br />8.00.384 Service Pack 1 <br />8.00.287 Q297209 <br />8.00.251 Q300194 <br />8.00.250 Q291683 <br />8.00.249 Q288122 <br />8.00.239 Q285290 <br />8.00.233 Q282416 <br />8.00.231 Q282279 <br />8.00.226 Q278239 <br />8.00.225 Q281663 <br />8.00.223 Q280380 <br />8.00.222 Q281769 <br />8.00.218 Q279183 <br />8.00.217 Q279293/Q279296 <br />8.00.211 Q276329 <br />8.00.210 Q275900 <br />8.00.205 Q274330 <br />8.00.204 Q274329 <br />8.00.194 RTM(SQL Server 8 with no service pack applied)<br /><br /><strong>For SQL Server 7</strong><br /><br />Main Releases<br />@@version Version and Service Pack <br />7.00.1063 SQL Server 7 with Service Pack 4 <br />7.00.961 SQL Server 7 with Service Pack 3 <br />7.00.842 SQL Server 7 with Service Pack 2 <br />7.00.699 SQL Server 7 with Service Pack 1 <br />7.00.623 SQL Server 7 with no service pack applied <br /><br /><strong>For SQL Server 6.5</strong><br /><br />Main Releases<br />@@version Version and Service Pack <br />6.50.479 SQL Server 6.5 with Service Pack 5a (updated) <br />6.50.416 SQL Server 6.5 with Service Pack 5a. <br />6.50.415 SQL Server 6.5 with Service Pack 5 <br />6.50.281 SQL Server 6.5 with Service Pack 4 <br />6.50.258 SQL Server 6.5 with Service Pack 3 <br />6.50.240 SQL Server 6.5 with Service Pack 2 <br />6.50.213 SQL Server 6.5 with Service Pack 1 <br />6.50.201 SQL Server 6.5 with no service pack applied <br /><br /><strong>For SQL Server 6</strong><br /><br />Main Releases<br />@@version Version and Service Pack <br />6.00.151 SQL Server 6 with Service Pack 3 <br />6.00.139 SQL Server 6 with Service Pack 2 <br />6.00.124 SQL Server 6 with Service Pack 1 <br />6.00.121 SQL Server 6 with no service pack applied <br /><br /><strong>补充</strong><br />For SQL Server 2005<br />打了sp3后版本号是&nbsp;<strong>9.0.4035</strong>如果是这个旧说明不用打了，如果比这个低，说明没有打<img src ="http://www.blogjava.net/keweibo/aggbug/391210.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2012-11-12 16:19 <a href="http://www.blogjava.net/keweibo/articles/391210.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>