<?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>博客园-datasky</title><link>http://www.cnblogs.com/datasky/</link><description /><language>zh-cn</language><lastBuildDate>Mon, 06 Oct 2008 17:40:30 GMT</lastBuildDate><pubDate>Mon, 06 Oct 2008 17:40:30 GMT</pubDate><ttl>60</ttl><item><title>china-citys中国城市联盟</title><link>http://www.cnblogs.com/datasky/archive/2008/08/29/1279184.html</link><dc:creator>datasky</dc:creator><author>datasky</author><pubDate>Fri, 29 Aug 2008 02:04:00 GMT</pubDate><guid>http://www.cnblogs.com/datasky/archive/2008/08/29/1279184.html</guid><wfw:comment>http://www.cnblogs.com/datasky/comments/1279184.html</wfw:comment><comments>http://www.cnblogs.com/datasky/archive/2008/08/29/1279184.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/datasky/comments/commentRss/1279184.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/datasky/services/trackbacks/1279184.html</trackback:ping><description><![CDATA[<p>china-citys</p>
<p>中国城市联盟</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<img src ="http://www.cnblogs.com/datasky/aggbug/1279184.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42809/" target="_blank">[新闻]51.COM技术副总裁邵辉跳槽百度</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>Jquery入门[转]</title><link>http://www.cnblogs.com/datasky/archive/2008/08/13/1267166.html</link><dc:creator>datasky</dc:creator><author>datasky</author><pubDate>Wed, 13 Aug 2008 09:30:00 GMT</pubDate><guid>http://www.cnblogs.com/datasky/archive/2008/08/13/1267166.html</guid><wfw:comment>http://www.cnblogs.com/datasky/comments/1267166.html</wfw:comment><comments>http://www.cnblogs.com/datasky/archive/2008/08/13/1267166.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/datasky/comments/commentRss/1267166.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/datasky/services/trackbacks/1267166.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;随着WEB2.0及ajax思想在互联网上的快速发展传播，陆续出现了一些优秀的Js框架，其中比较著名的有Prototype、YUI、 jQuery、mootools、Bindows以及国内的JSVM框架等，通过将这些JS框架应用到我们的项目中能够使程序员从设计和书写繁杂的JS应用中解脱出来，将关注点转向功能需求而非实现细节上，从而提高项目的开发速度。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jQuery是继prototype之后的又一个优秀的Javascript框架。它是由 John Resig 于 2006 年初创建的，它有助于简化 JavaScript&#8482; 以及Ajax 编程。有人使用这样的一比喻来比较prototype和jQuery：prototype就像Java，而jQuery就像ruby. 它是一个简洁快速灵活的JavaScript框架，它能让你在你的网页上简单的操作文档、处理事件、实现特效并为Web页面添加Ajax交互。<br />
<br />
它具有如下一些特点：<br />
1、代码简练、语义易懂、学习快速、文档丰富。<br />
2、jQuery是一个轻量级的脚本，其代码非常小巧，最新版的JavaScript包只有20K左右。<br />
3、jQuery支持CSS1-CSS3,以及基本的xPath。<br />
4、jQuery是跨浏览器的，它支持的浏览器包括IE 6.0+, FF 1.5+, Safari 2.0+, Opera 9.0+。<br />
5、可以很容易的为jQuery扩展其他功能。<br />
6、能将JS代码和HTML代码完全分离，便于代码和维护和修改。<br />
7、插件丰富，除了jQuery本身带有的一些特效外，可以通过插件实现更多功能，如表单验证、tab导航、拖放效果、表格排序、DataGrid，树形菜单、图像特效以及ajax上传等。<br />
<br />
jQuery的设计会改变你写JavaScript代码的方式，降低你学习使用JS操作网页的复杂度，提高网页JS开发效率，无论对于js初学者还是资深专家，jQuery都将是您的首选。<br />
jQuery适合于设计师、开发者以及那些还好者，同样适合用于商业开发，可以说jQuery适合任何JavaScript应用的地方，可用于不同的Web应用程序中。<br />
官方站点：<a href="http://jquery.com/" target="_blank">http://jquery.com/</a>&nbsp;&nbsp;中文站点：<a href="http://jquery.org.cn/" target="_blank">http://jquery.org.cn/</a><br />
<br />
<strong>1.2、目的</strong><br />
通过学习本文档，能够对jQuery有一个简单的认识了解，清楚JQuery与其他JS框架的不同，掌握jQuery的常用语法、使用技巧及注意事项。<br />
<br />
<strong>二、使用方法</strong><br />
在需要使用JQuery的页面中引入JQuery的js文件即可。<br />
例如：&lt;script type="text/javascript" src="js/jquery.js"&gt;&lt;/script&gt;<br />
引入之后便可在页面的任意地方使用jQuery提供的语法。<br />
<br />
<strong>三、学习教程及参考资料</strong><br />
请参照《jQuery中文API手册》和<a href="http://jquery.org.cn/visual/cn/index.xml" target="_blank">http://jquery.org.cn/visual/cn/index.xml</a><br />
推荐两篇不错的jquery教程：《jQuery的起点教程》和《使用 jQuery 简化 Ajax 开发》<br />
<br />
<br />
<strong>四、语法总结和注意事项</strong><br />
<br />
<span style="color: red">1、关于页面元素的引用</span><br />
通过jquery的$()引用元素包括通过id、class、元素名以及元素的层级关系及dom或者xpath条件等方法，且返回的对象为jquery对象（集合对象），不能直接调用dom定义的方法。<br />
<br />
<span style="color: red">2、jQuery对象与dom对象的转换</span><br />
只有jquery对象才能使用jquery定义的方法。注意dom对象和jquery对象是有区别的，调用方法时要注意操作的是dom对象还是jquery对象。<br />
普通的dom对象一般可以通过$()转换成jquery对象。<br />
如：$(document.getElementById("msg"))则为jquery对象，可以使用jquery的方法。<br />
由于jquery对象本身是一个集合。所以如果jquery对象要转换为dom对象则必须取出其中的某一项，一般可通过索引取出。<br />
如：$("#msg")[0]，$("div").eq(1)[0]，$("div").get()[1]，$("td")[5]这些都是dom对象，可以使用dom中的方法，但不能再使用Jquery的方法。<br />
以下几种写法都是正确的：<br />
$("#msg").html();<br />
$("#msg")[0].innerHTML;<br />
$("#msg").eq(0)[0].innerHTML;<br />
$("#msg").get(0).innerHTML;<br />
<br />
<span style="color: red">3、如何获取jQuery集合的某一项</span><br />
对于获取的元素集合，获取其中的某一项（通过索引指定）可以使用<span style="color: blue">eq</span>或<span style="color: blue">get(n)</span>方法或者索引号获取，<span style="color: orange">要注意，eq返回的是jquery对象，而get(n)和索引返回的是dom元素对象</span>。对于jquery对象只能使用jquery的方法，而dom对象只能使用dom的方法，如要获取第三个&lt;div&gt;元素的内容。有如下两种方法：<br />
$("div").eq(2).html();&nbsp;&nbsp;&nbsp;&nbsp;//调用jquery对象的方法<br />
$("div").get(2).innerHTML;&nbsp;&nbsp;//调用dom的方法属性<br />
<br />
<span style="color: red">4、同一函数实现set和get</span><br />
Jquery中的很多方法都是如此，主要包括如下几个：<br />
$("#msg").html();&nbsp;&nbsp;&nbsp;&nbsp;//返回id为msg的元素节点的html内容。<br />
$("#msg").html("&lt;b&gt;new content&lt;/b&gt;");&nbsp;&nbsp;<br />
//将&#8220;&lt;b&gt;new content&lt;/b&gt;&#8221; 作为html串写入id为msg的元素节点内容中,页面显示粗体的new content<br />
<br />
$("#msg").text();&nbsp;&nbsp;&nbsp;&nbsp;//返回id为msg的元素节点的文本内容。<br />
$("#msg").text("&lt;b&gt;new content&lt;/b&gt;");&nbsp;&nbsp;<br />
//将&#8220;&lt;b&gt;new content&lt;/b&gt;&#8221; 作为普通文本串写入id为msg的元素节点内容中,页面显示&lt;b&gt;new content&lt;/b&gt;<br />
<br />
$("#msg").height();&nbsp;&nbsp;&nbsp;&nbsp;//返回id为msg的元素的高度<br />
$("#msg").height("300");&nbsp;&nbsp;//将id为msg的元素的高度设为300<br />
$("#msg").width();&nbsp;&nbsp;&nbsp;&nbsp;//返回id为msg的元素的宽度<br />
$("#msg").width("300");&nbsp;&nbsp;//将id为msg的元素的宽度设为300<br />
<br />
$("input").val(");&nbsp;&nbsp;//返回表单输入框的value值<br />
$("input").val("test");&nbsp;&nbsp;//将表单输入框的value值设为test<br />
<br />
$("#msg").click();&nbsp;&nbsp;//触发id为msg的元素的单击事件<br />
$("#msg").click(fn);&nbsp;&nbsp;//为id为msg的元素单击事件添加函数<br />
同样blur,focus,select,submit事件都可以有着两种调用方法<br />
<br />
<span style="color: red">5、集合处理功能</span><br />
对于jquery返回的集合内容无需我们自己循环遍历并对每个对象分别做处理，jquery已经为我们提供的很方便的方法进行集合的处理。<br />
包括两种形式：<br />
$("p").each(function(i){this.style.color=['#f00','#0f0','#00f'][i]})&nbsp;&nbsp;<br />
//为索引分别为0，1，2的p元素分别设定不同的字体颜色。<br />
<br />
$("tr").each(function(i){this.style.backgroundColor=['#ccc','#fff'][i%2]})&nbsp;&nbsp;<br />
//实现表格的隔行换色效果<br />
<br />
$("p").click(function(){alert($(this).html())})&nbsp;&nbsp;&nbsp;&nbsp;<br />
//为每个p元素增加了click事件，单击某个p元素则弹出其内容<br />
<br />
<span style="color: red">6、扩展我们需要的功能</span><br />
$.extend({<br />
&nbsp;&nbsp;min: function(a, b){return a &lt; b?a:b; },<br />
&nbsp;&nbsp;max: function(a, b){return a &gt; b?a:b; } <br />
});&nbsp;&nbsp;//为jquery扩展了min,max两个方法<br />
使用扩展的方法（通过&#8220;$.方法名&#8221;调用）：<br />
alert("a=10,b=20,max="+$.max(10,20)+",min="+$.min(10,20));<br />
<br />
<span style="color: red">7、支持方法的连写</span><br />
所谓连写，即可以对一个jquery对象连续调用各种不同的方法。<br />
例如：<br />
$("p").click(function(){alert($(this).html())})<br />
.mouseover(function(){alert('mouse over event')})<br />
.each(function(i){this.style.color=['#f00','#0f0','#00f'][i]});<br />
<br />
<span style="color: red">8、操作元素的样式</span><br />
主要包括以下几种方式：<br />
$("#msg").css("background");&nbsp;&nbsp;&nbsp;&nbsp;//返回元素的背景颜色<br />
$("#msg").css("background","#ccc")&nbsp;&nbsp;//设定元素背景为灰色<br />
$("#msg").height(300); $("#msg").width("200");&nbsp;&nbsp;//设定宽高<br />
$("#msg").css({ color: "red", background: "blue" });//以名值对的形式设定样式<br />
$("#msg").addClass("select");&nbsp;&nbsp;//为元素增加名称为select的class<br />
$("#msg").removeClass("select");&nbsp;&nbsp;//删除元素名称为select的class<br />
$("#msg").toggleClass("select");&nbsp;&nbsp;//如果存在（不存在）就删除（添加）名称为select的class<br />
<br />
<span style="color: red">9、完善的事件处理功能</span><br />
Jquery已经为我们提供了各种事件处理方法，我们无需在html元素上直接写事件，而可以直接为通过jquery获取的对象添加事件。<br />
如：<br />
$("#msg").click(function(){alert("good")})&nbsp;&nbsp;//为元素添加了单击事件<br />
$("p").click(function(i){this.style.color=['#f00','#0f0','#00f'][i]})<br />
//为三个不同的p元素单击事件分别设定不同的处理<br />
<strong>jQuery中几个自定义的事件：</strong><br />
（1）<span style="color: blue">hover(fn1,fn2)：</span>一个模仿悬停事件（鼠标移动到一个对象上面及移出这个对象）的方法。当鼠标移动到一个匹配的元素上面时，会触发指定的第一个函数。当鼠标移出这个元素时，会触发指定的第二个函数。<br />
//当鼠标放在表格的某行上时将class置为over，离开时置为out。<br />
$("tr").hover(function(){<br />
$(this).addClass("over");<br />
},<br />
&nbsp;&nbsp;function(){<br />
&nbsp;&nbsp; $(this).addClass("out"); <br />
});<br />
（2）<span style="color: blue">ready(fn):</span>当DOM载入就绪可以查询及操纵时绑定一个要执行的函数。<br />
$(document).ready(function(){alert("Load Success")})<br />
//页面加载完毕提示&#8220;Load Success&#8221;,相当于onload事件。与$(fn)等价<br />
（3）<span style="color: blue">toggle(evenFn,oddFn): </span>每次点击时切换要调用的函数。如果点击了一个匹配的元素，则触发指定的第一个函数，当再次点击同一元素时，则触发指定的第二个函数。随后的每次点击都重复对这两个函数的轮番调用。<br />
&nbsp;&nbsp;//每次点击时轮换添加和删除名为selected的class。<br />
&nbsp;&nbsp;$("p").toggle(function(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;$(this).addClass("selected");&nbsp;&nbsp; <br />
&nbsp;&nbsp;},function(){<br />
&nbsp;&nbsp;&nbsp;&nbsp; $(this).removeClass("selected"); <br />
&nbsp;&nbsp;});<br />
（4）<span style="color: blue">trigger(eventtype):</span> 在每一个匹配的元素上触发某类事件。<br />
例如：<br />
&nbsp;&nbsp;$("p").trigger("click");&nbsp;&nbsp;&nbsp;&nbsp;//触发所有p元素的click事件<br />
（5）<span style="color: blue">bind(eventtype,fn)，unbind(eventtype): </span>事件的绑定与反绑定<br />
从每一个匹配的元素中（添加）删除绑定的事件。<br />
例如：<br />
$("p").bind("click", function(){alert($(this).text());});&nbsp;&nbsp;//为每个p元素添加单击事件<br />
$("p").unbind();&nbsp;&nbsp;//删除所有p元素上的所有事件<br />
$("p").unbind("click")&nbsp;&nbsp;//删除所有p元素上的单击事件<br />
<br />
<span style="color: red">10、几个实用特效功能</span><br />
其中toggle()和slidetoggle()方法提供了状态切换功能。<br />
如toggle()方法包括了hide()和show()方法。<br />
slideToggle()方法包括了slideDown()和slideUp方法。<br />
<br />
<span style="color: red">11、几个有用的jQuery方法</span><br />
<span style="color: blue">$.browser.浏览器类型：</span>检测浏览器类型。有效参数：safari, opera, msie, mozilla。如检测是否ie：$.browser.isie，是ie浏览器则返回true。<br />
<span style="color: blue">$.each(obj, fn)：</span>通用的迭代函数。可用于近似地迭代对象和数组（代替循环）。<br />
如<br />
$.each( [0,1,2], function(i, n){ alert( "Item #" + i + ": " + n ); }); <br />
等价于：<br />
var tempArr=[0,1,2];<br />
for(var i=0;i&lt;tempArr.length;i++){<br />
&nbsp;&nbsp;alert("Item #"+i+": "+tempArr[i]);<br />
}<br />
也可以处理json数据，如<br />
$.each( { name: "John", lang: "JS" }, function(i, n){ alert( "Name: " + i + ", Value: " + n ); });<br />
结果为：<br />
Name:name, Value:John<br />
Name:lang, Value:JS<br />
<span style="color: blue">$.extend(target,prop1,propN)：</span>用一个或多个其他对象来扩展一个对象，返回这个被扩展的对象。这是jquery实现的继承方式。<br />
如：<br />
$.extend(settings, options);&nbsp;&nbsp;<br />
//合并settings和options，并将合并结果返回settings中，相当于options继承setting并将继承结果保存在setting中。<br />
var settings = $.extend({}, defaults, options);<br />
//合并defaults和options，并将合并结果返回到setting中而不覆盖default内容。<br />
可以有多个参数（合并多项并返回）<br />
<span style="color: blue">$.map(array, fn)：</span>数组映射。把一个数组中的项目(处理转换后)保存到到另一个新数组中，并返回生成的新数组。<br />
如：<br />
var tempArr=$.map( [0,1,2], function(i){ return i + 4; });<br />
tempArr内容为：[4,5,6]<br />
var tempArr=$.map( [0,1,2], function(i){ return i &gt; 0 ? i + 1 : null; });<br />
tempArr内容为：[2,3]<br />
<span style="color: blue">$.merge(arr1,arr2):</span>合并两个数组并删除其中重复的项目。<br />
如：$.merge( [0,1,2], [2,3,4] )&nbsp;&nbsp;//返回[0,1,2,3,4]<br />
<span style="color: blue">$.trim(str)：</span>删除字符串两端的空白字符。 <br />
如：$.trim("&nbsp;&nbsp;hello, how are you?&nbsp;&nbsp; ");&nbsp;&nbsp; //返回"hello,how are you? "<br />
<br />
<span style="color: red">12、解决自定义方法或其他类库与jQuery的冲突</span><br />
很多时候我们自己定义了$(id)方法来获取一个元素，或者其他的一些js类库如prototype也都定义了$方法，如果同时把这些内容放在一起就会引起变量方法定义冲突，Jquery对此专门提供了方法用于解决此问题。<br />
使用jquery中的<span style="color: blue">jQuery.noConflict();</span>方法即可把变量$的控制权让渡给第一个实现它的那个库或之前自定义的$方法。之后应用Jquery的时候只要将所有的$换成jQuery即可，如原来引用对象方法$("#msg")改为jQuery("#msg")。<br />
如：<br />
jQuery.noConflict(); <br />
// 开始使用jQuery<br />
jQuery("div&nbsp;&nbsp; p").hide();<br />
// 使用其他库的 $() <br />
$("content").style.display = 'none'; </p>
<p>&nbsp;</p>
<img src ="http://www.cnblogs.com/datasky/aggbug/1267166.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42807/" target="_blank">[新闻]Mono 2.0终于到来</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>AJAX / AJAX框架 / AJAX.NET (Professional) / ASP.NET AJAX</title><link>http://www.cnblogs.com/datasky/archive/2008/08/13/1266640.html</link><dc:creator>datasky</dc:creator><author>datasky</author><pubDate>Wed, 13 Aug 2008 03:17:00 GMT</pubDate><guid>http://www.cnblogs.com/datasky/archive/2008/08/13/1266640.html</guid><wfw:comment>http://www.cnblogs.com/datasky/comments/1266640.html</wfw:comment><comments>http://www.cnblogs.com/datasky/archive/2008/08/13/1266640.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/datasky/comments/commentRss/1266640.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/datasky/services/trackbacks/1266640.html</trackback:ping><description><![CDATA[<p>学习或者研究一个东西，前提至少得先明白它是一个什么东西。</p>
<p>用过Ajaxpro，了解过Asp.net ajax，最近在学习jQuery，为了理清楚这些东西之间的关系和区别，到网上找了点资料，发现园子里&#8220;老赵&#8221;作了解释，下面的一段就摘自其中。原文：<a class="singleposttitle" id="AjaxHolder_ctl01_TitleUrl" href="http://www.cnblogs.com/JeffreyZhao/archive/2008/06/04/ajax-linq-lambda-expression.html"><font color="#223355">觉得有必要来澄清几组重要概念</font></a> </p>
<p>&nbsp;</p>
<p>　　这是我们见过的混淆最多的一组概念。不过当去年AJAX技术如火如荼，AJAX框架层出不穷，而微软又推出ASP.NET AJAX框架之后，这四个概念之间的混淆也愈发严重起来了。我们经常能看到这样的问题：</p>
<ul>
    <li>我在用AJAX技术时不知道怎么在UpdatePanel里&#8230;&#8230;</li>
    <li>我用AJAX.NET框架调用Web Service时&#8230;&#8230; </li>
</ul>
<p>　　这是非常典型的概念混淆，上面两句话的AJAX与AJAX.NET都应该使用ASP.NET AJAX替换。我们在学习AJAX相关技术时需要理解以下概念：</p>
<p>　　<strong>AJAX</strong>是Asynchronous JavaScript and XML缩写。这个概念代表的是一种技术，当您在说&#8220;我在项目中使用了AJAX技术时&#8221;，只是代表了您使用客户端XMLHttpRequest对象与服务器端进行异步通信。不过因为随着AJAX技术的运用往往会带来丰富的客户端效果，因此对AJAX技术的广义理解也可以认为这是一种操作客户端DOM而带来丰富效果的技术。</p>
<p>　　<strong>AJAX框架</strong>是一套辅助开发人员使用AJAX技术的代码包（库，etc.）。一个AJAX框架的目的一般是对XMLHttpRequest对象的使用进行封装，并提供一些操作DOM元素或者实现特殊效果的&#8220;捷径&#8221;。成熟的AJAX框架有很多，它们可以被分为&#8220;以客户端为中心&#8221;和&#8220;面向特定服务器技术&#8221;两大类。前者的优秀代表有（排名不分先后）：<a href="http://www.prototypejs.org/">Prototype</a>、<a href="http://jquery.com/">jQuery</a>、<a href="http://mootools.net/">Mootools</a>、<a href="http://developer.yahoo.com/yui/">YUI</a>、<a href="http://dojotoolkit.org/">Dojo</a>、<a title="EXTJS" href="http://extjs.com/">EXTJS 2.0</a>等等；而后者的典型代表有<font face="Verdana"><a href="http://anthem-dot-net.sourceforge.net/"><font face="Verdana">Anthem.NET</font></a></font>、AJAX.NET、<font face="Verdana"><a href="http://www.magicajax.net/"><font face="Verdana">MagicAjax.NET</font></a></font>和微软ASP.NET AJAX(最初为Atlas)(<a href="http://www.dotnettools.org/Blog/article.asp?id=95">这几个对比参考</a>)；当然，也有优秀的AJAX框架面向其他服务器技术，呵呵这个我还没有了解。</p>
<p>　　<strong>AJAX.NET (Professional)</strong>是ASP.NET平台上著名的AJAX框架，诞生于2005年2月（虽然正式命名为AJAX.NET则是在两个月之后），作者为<a href="http://weblogs.asp.net/mschwarz/archive/2008/01/04/future-of-ajax-net-professional.aspx">Michael Schwarz</a>。同年10月，Michael为AJAX.NET提供了更丰富的功能（主要是安全性方面），并将其改名为AJAX.NET Professional。AJAX.NET提供的最主要的（也是唯一）的功能就是异步调用服务器端方法，可谓非常纯粹的&#8220;基于数据&#8221;的AJAX使用方式。这个框架是一个个人作品，有支持.NET 1.1和2.0的版本，它并不属于微软官方，目前已经停止更新。</p>
<p>　　<strong>ASP.NET AJAX</strong>的Code Name为&#8220;Atlas&#8221;，在CTP向Beta版转移时曾经发生过翻天覆地的变化。ASP.NET AJAX中包含了UpdatePanel等控件，可以非常透明地为现有的ASP.NET WebForms应用程序添加AJAX效果。此外还提供了客户端异步调用Web Services的方法，使开发人员也能够使用面向数据的方式使用AJAX技术。值得一提的是ASP.NET AJAX的&#8220;附属品&#8221;相当丰富。例如ASP.NET AJAX名为&#8220;Microsoft AJAX Library&#8221;的客户端部分是一个纯客户端AJAX框架，提供了面向对象类型系统、浏览器兼容层、异步通信层等多种基础组件；ASP.NET AJAX的开源扩展包&#8220;AJAX Control Toolkit&#8221;包含了数十个可以直接使用的AJAX服务器端控件，这样开发人员能够轻松地添加丰富的客户端效果。同时，官方还为ASP.NET AJAX提供了&#8220;非正式&#8221;地扩展包，其中的History等优秀控件也将加入未来版本的ASP.NET AJAX框架中。ASP.NET AJAX是官方出品的AJAX框架，目前已经被集成到ASP.NET 3.5中去了，因此其版本号也从ASP.NET AJAX 1.0一下子&#8220;跃升为&#8221;ASP.NET AJAX 3.5。如果您看到了这些版本号也请不要疑惑，其实ASP.NET AJAX 3.5相对于ASP.NET AJAX 1.0来说只是修补了一些细小bug，几乎没有任何变化。<br />
</p>
<img src ="http://www.cnblogs.com/datasky/aggbug/1266640.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42807/" target="_blank">[新闻]Mono 2.0终于到来</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>也谈团队建设</title><link>http://www.cnblogs.com/datasky/archive/2008/08/06/1261740.html</link><dc:creator>datasky</dc:creator><author>datasky</author><pubDate>Wed, 06 Aug 2008 02:47:00 GMT</pubDate><guid>http://www.cnblogs.com/datasky/archive/2008/08/06/1261740.html</guid><wfw:comment>http://www.cnblogs.com/datasky/comments/1261740.html</wfw:comment><comments>http://www.cnblogs.com/datasky/archive/2008/08/06/1261740.html#Feedback</comments><slash:comments>23</slash:comments><wfw:commentRss>http://www.cnblogs.com/datasky/comments/commentRss/1261740.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/datasky/services/trackbacks/1261740.html</trackback:ping><description><![CDATA[摘要: 这方面的文字很多，看到园子最近不少朋友都在说这个话题，我也来跟一次风。这两天，正好领导让写点感受，总结点经验，就把其中的一部分贴出来，和大家交流一下，欢迎各位发表意见或建议。不妥之处，还望各位达人指点！鞠个躬！谢谢先!&nbsp;&nbsp;<a href='http://www.cnblogs.com/datasky/archive/2008/08/06/1261740.html'>阅读全文</a><img src ="http://www.cnblogs.com/datasky/aggbug/1261740.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42808/" target="_blank">[新闻]百度任命李一男担任首席技术官</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>新一代报表工具–报表设计的革命[转]</title><link>http://www.cnblogs.com/datasky/archive/2008/07/09/1238966.html</link><dc:creator>datasky</dc:creator><author>datasky</author><pubDate>Wed, 09 Jul 2008 07:41:00 GMT</pubDate><guid>http://www.cnblogs.com/datasky/archive/2008/07/09/1238966.html</guid><wfw:comment>http://www.cnblogs.com/datasky/comments/1238966.html</wfw:comment><comments>http://www.cnblogs.com/datasky/archive/2008/07/09/1238966.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/datasky/comments/commentRss/1238966.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/datasky/services/trackbacks/1238966.html</trackback:ping><description><![CDATA[<p><strong>一、前言</strong></p>
<p>　　报表，是应用软件系统中非常重要的环节。</p>
<p>　　报表，是用户最容易变化、最可能扩展的需求。</p>
<p>　　报表，看似简单，实际往往会占用开发者大量的精力与资源。</p>
<p>　　为了解决报表的制作问题，为了提高开发的效率，出现了专门报表工具，从图形界面开始，最早可以算是十多年前VB下面捆绑的Crystal Report了。它的设计模式，至今还是大多数报表工具所采用的基本模式，象Brio, MSTR，Cognos, Style Report, Actuate这些常见的报表工具/BI前端展现工具，无不是基于这一种模式。</p>
<p>　　报表工具随着需求的发展、应用开发水平的提高在不断发展，由 C/S结构发展到支持Web报表的方式，出现了许多增强的功能，也出现了大量的新产品，然而，基于传统的模型，只能是改良，报表设计的效率、运行的性能无法取得本质的提高。</p>
<p>　　技术的创新总是由需求拉动的。大量的、复杂的报表需求，使得报表工具从技术上出现了一系列的新东西，这已经不仅仅是改良，而是报表工具的一个革命，因为它从报表的根本-报表的设计模型上，进行了根本性的变革。称之为新一代报表工具并不为过。</p>
<p>　　以润乾软件为代表的新一代报表工具，其设计模型与传统工具相比，可以用：多源分片、不规则划分、行列对称、动态格间计算这四大特点来概括和理解。<br />
</p>
<p><strong>二、多源分片</strong></p>
<p>　　先看一个并不复杂的例子：</p>
<p><img height="183" alt="" src="http://www.runqian.com.cn/tech/tech_images/tech_017_2_clip_image001.jpg" width="537" /></p>
<p>　　实际的业务数据，是分别保存在汽车、房产、土地和其他四个表中的。（在业务数据本身的处理过程中，很可能基于汽车、房产等都还有大量的信息，字段各不相同，因此不可能将这些数据都放在一个表中）</p>
<p>　　在传统工具中，实现这个报表的办法，就是先写复杂的SQL语句，形成一个视图：</p>
<p>　　select 客户表.客户编码,sum(汽车.抵押金额), sum(房产.抵押金额), sum(土地.抵押金额),sum(其他.低价金额 ) from 汽车,房产,土地,其他 group by汽车.客户编码,房产客户编码.土地.客户编码,其他.客户编码 where (客户表.客户编码 in (select 汽车.客户编码 from 汽车) or客户表.客户编码 in (select f房产.客户编码 from 房产) or客户表.客户编码 in (select 土地.客户编码 from 土地) or客户表.客户编码 in (select 其他.客户编码 from 其他)) and汽车.客户编码=客户表.客户编码 and&nbsp;房屋.客户编码=客户表.客户编码 and&nbsp;土地.客户编码=客户表.客户编码 and&nbsp;其他.客户编码=客户表.客户编码。</p>
<p>　　这就是一种单源、不分片的方法，对于这样一个简单的例子，用单源、不分片的传统方法尚可以实现，但是会有很多变化、很多需求（下文会提到），实现起来就更困难甚至不可能了。但就是这张表，做这个复杂的SQL，也是要花点功夫的。更不用说运行时的效率了。</p>
<p>　　而在支持多源分片的新一代报表工具-润乾报表中，只需要直接使用几个类似于&#8220;select sum(汽车.抵押金额) from 汽车 group by 汽车.客户编码&#8221;这样的简单SQL作为数据库，就可以轻松实现：</p>
<p><img height="149" alt="" src="http://www.runqian.com.cn/tech/tech_images/tech_017_2_clip_image002.jpg" width="525" /></p>
<p>　　也就是，在报表中直接使用四个数据源，将报表分成了四片，由于新一代报表工具支持各片之间的动态关联，所以使复杂的问题大大简化了。</p>
<p>　　以这个例子为基础，我们可以对多源分片有了一个初步的认识。下面深入讨论一下：</p>
<p>　　多源是指一个报表的数据来源来自多个物理数据表（或类似数据体，如视图或其他虚拟表）。这里的&#8220;多个&#8221;甚至不只是两个三个，而可能是七八个乃至十几个。很多传统报表工具在设计时都可以从多个表中取数据，但实际上还是将这些表通过关联等方式形成了一个单一的数据源，即一个视图。这并不是我们所说的多源，因为在你取字段时，总是来自于这一个视图，即在报表设计前将多源转化成单源处理。而某些传统工具所说的多源，则实际上指的就是多数据库支持，只是把数据库桥功能集成进入报表工具中，但真正到报表设计时仍然是单源的。象上述的多表、多库都不是真正能简化报表设计的多源，只有在进行报表设计时，多个数据源可以独立使用，才是我们所说的多源。</p>
<p>　　分片是指报表的纵向或横向（或双向）同时被分成了多个区域，每个区域重复规则不同，而又可能相互运算。许多传统报表工具都提供子报表。子报表可以说是某一种分片的方法，但是子报表与主报表并非一个整体，不能互相运算。而我们所说的分片，是各片处于一个统一的报表当中，可以互相运算。</p>
<p>　　多源与分片是紧密相关的，往往分片后不同片需要使用不同的数据源。</p>
<p>　　在出现多源分片这一新技术前，传统工具对于这种表中不同部分的数据来自不同数据源的分片问题的解决方案是：</p>
<p>　　- 对于报表的水平方向上的几片，可以做成一个统一的视图，或者写存储过程、或者写程序准备数据。</p>
<p>　　- 对于纵向上格式与内容的变化，可以用子报表。（因为格式不一样，光用UNION准备数据是不行）</p>
<p>　　然而，问题在哪里呢？</p>
<p>　　做统一的视图（单源），会产生两大问题：</p>
<p>　　1． SQL的复杂程度：横向分片，需要JOIN；如果纵向也有分片，则需要JOIN+UNION。那么，如果数据来自于五六个数据源呢？这个SQL怎么写，既需要水平，也需要时间。</p>
<p>　　2．运行效率：就算你写出了SQL，能够做出来这张表，但实际运行时的效率会怎么样呢。如果是三张表做JOIN，复杂度就是O(Nk)。</p>
<p>　　当然，还可以写存储过程（带来移植方面的问题）、写代码，通过分步计算来避免复杂的SQL，通过预先准备数据来解决运行效率问题&#8230;&#8230;，但是，相应会带来对开发效率的巨大影响。</p>
<p>　　子报表，应该说也能解决一部分问题（主要是纵向的。横向上子报表基本没有用），因为从理论上毕竟子报表可以使用与母报表独立的数据源。但是，子报表也存在着若干问题：</p>
<p>　　1．各个子表各自为政，主表或某个子表的格式进行了调整，所有其它子表都需要改动，这是极其繁琐的工作。</p>
<p>　　2．在数据上，主子表之间和子表相互之间都无法沟通数据，只能将主表的数据作为参数传递给子表，子表无法带回信息，也无法向其它子表提供信息。这时，整表的混合运算将非常困难，必须单独计算，无法采用某些子表的中间运算结果，不仅书写复杂，运算效率也降低。</p>
<p>　　这是一个标准的主子报表（主从报表），其中下面的产品明细行部分是用子报表实现的：</p>
<p><img height="256" alt="" src="http://www.runqian.com.cn/tech/tech_images/tech_017_2_clip_image004.gif" width="533" /></p>
<p>　　但是要注意，在主表中出现了金额这一项。这个数据实际是来自于子报表中的数据合计。但是，由于子报表无法将数据传递给主报表，所以解决起来就只能用另外的方式在主报表中把这个数计算出来。如果有多个这种数据项（比如数量的合计之类的），实现起来就更复杂了。这还只是一个标准的主子报表的情况，实际会有更多更复杂的格式与数据关联的情况，是拿子报表很难实现的。</p>
<p>　　对于传统工具的这些困难，采用多源与分片的技术，则可以迎刃而解。做起来非常复杂的表，可以应用多源分片技术轻松完成。</p>
<p>　　不仅对于那些用传统工具非常复杂，但是还是&#8220;能做&#8221;的表，可以应用多源分片大大提高开发与运行效率，并且对于许多传统工具&#8220;不能做&#8221;的表，更是可以通过新的模型来轻松解决。</p>
<p>　　下面我们就看一个来自于实际业务中的真实报表：</p>
<p><img height="497" alt="" src="http://www.runqian.com.cn/tech/tech_images/tech_017_2_clip_image006.gif" width="548" /></p>
<p>　　这个表是个典型的纵向分片报表，数据区从上至下分成了几片，先是一片按客户汇总的两级分组区域，然后是两个固定计算行，接下来又是一片按年度汇总的一级分组区域，最后又是一个固定的合计行。各片分组层数不同，而且变动与固定固定结合，而且各片之间还有数据沟通（某些计算行的值是由其它行计算出来的）。这种上下格式都不一致的报表，其数据源是不可能组织成单源的（各片列数不同），也就不可能被传统工具实现</p>
<p>　　而采用新一代报表工具的多源分组模型，实现起来则是很轻松的：</p>
<p align="center"><img height="272" alt="" src="http://www.runqian.com.cn/tech/tech_images/tech_017_2_clip_image008.jpg" width="404" /></p>
<p>&nbsp; </p>
<p><!-- InstanceEndEditable --></p>
<p><strong>三、不规则划分</strong></p>
<p>　　传统报表工具中，很典型的就是数据分组。例如：</p>
<p>　　省份</p>
<p>　　城市</p>
<p>　　显示出来就是：</p>
<p>　　山东</p>
<p>　　济南</p>
<p>　　青岛</p>
<p>　　山西</p>
<p>　　太原</p>
<p>　　大同</p>
<p>　　相信很多报表的开发者都对这些很熟悉。</p>
<p>　　这种分组都是完全规则划分的，即划分标准一致且有规则（一般都按某个字段或表达式），所有事实都必须出现且只出现一次，分组值次序与原数据记录次序一致。</p>
<p>　　与完全划分相对应，在报表汇总中却常常需要不规则划分，即划分标准看不出规律（常常只能穷举），所有事实不一定全部出现在分组结果中、个别事实还可能重复出现，次序也与原数据记录无关。</p>
<p>　　我们看一个例子：　　<img height="155" alt="" src="http://www.runqian.com.cn/tech/tech_images/tech_017_3_clip_image002.gif" width="531" /></p>
<p>　　这个报表用传统工具实现很困难，青岛的数据是山东的数据的一个子集，虽然报表格式并不复杂，但由于出现了不规则划分，无法直接用报表工具的分组功能完成，只能编程把数据准备成一个单层的二维表数据源，既加大了工作量，又很难体现数据之间的层次关系。(如可将&#8220;其中：石家庄&#8221;靠右呢，体现数据的层次关系)</p>
<p>　　在新一代报表工具中，上例的实现就要简单得多：</p>
<p align="center"><img height="170" alt="" src="http://www.runqian.com.cn/tech/tech_images/tech_017_3_clip_image004.jpg" width="505" /></p>
<p>　　在润乾报表中，我们可以使用两个数据集ds1和ds2在表格上的关联来完成这张表的定义。通过内建数据集或list函数，将地区按照需要的顺序排列出来。内建数据集编辑界面如下：</p>
<p align="center"><img height="382" alt="" src="http://www.runqian.com.cn/tech/tech_images/tech_017_3_clip_image006.jpg" width="478" /></p>
<p>　　为了突出河北和石家庄的从属关系，我们还可以在字段中加入空格来体现。通过定义C5格中的表达式为= ds1.sum(贷款余额,地区=B5) 将C5格的数据和B5的地区进行关联。</p>
<p>　　再看这张表，使用过Crystal Report的开发者可以想一想如何实现：</p>
<p><img height="446" alt="" src="http://www.runqian.com.cn/tech/tech_images/tech_017_3_clip_image008.gif" width="535" /></p>
<p>　　这里面涉及了不完全分组（年龄段并未覆盖全部的，你怎么把&lt;20的隐藏起来呢？）</p>
<p>　　新一代报表工具，则对不规则分组给予了良好的支持，使得很多这类问题能够轻松解决。</p>
<p>&nbsp;</p>
<p><!-- InstanceEndEditable --></p>
<p align="left"><strong>四、动态格间运算</strong></p>
<p>　　所有的报表工具都会提供一些计算列的功能，在原始数据基础上再计算出一些别的列值或统计值，这是报表展现中是不可缺少的功能。但是，传统工具在计算上的机制是有局限的：</p>
<p>　　1．传统工具一般只提供同行内的格间运算和针对某组（或全体）的集合运算，对于常见的跨行组运算则相当困难。</p>
<p>　　2．个别传统工具提供了简单的跨行能力，如可以引用上一行数据，而跨组则无能为力。</p>
<p>　　3．对于集合运算只提供个别固定的函数，如取第一名、算累计值等，无法组合出的通用集合运算则无计可施，如取第二名、算累计的乘积等。</p>
<p>　　4．某些带条件的运算更是无法可想，如计算语文成绩在90分以上的同学的数学成绩总和。</p>
<p>　　5．除了有规律的跨行组运算外，报表中还可能会有一些随意的独立格运算，其值可能是报表中的任意几个其它格运算出来，甚至还可能会引用到报表外的数据（比如和数据库中的数据再次运算等），这些都很难实现。</p>
<p>　　这些问题的根据原因在于，传统工具没有很好的运算后报表数据命名机制（传统工具只能用列名命名设计阶段的数据单元），很难精确描述数据引用关系，只能写出规律性很强的表达式，但随意的独立格运算会就使传统工具无法处理，而报表外的数据引用更是只能借助脚本或外围应用程序，导致代码极为混乱。而在具有动态格间运算的新一代报表工具中，就可以更加灵活地处理很多报表中的运算问题，可以不受上述种种限制，灵活地进行计算。并且，这种计算不仅可以随意地在数据格间进行，还可以在有数据展开的情况下进行动态的引用。</p>
<p>　　我们看两个典型的例子：</p>
<p><img height="751" alt="" src="http://www.runqian.com.cn/tech/tech_images/tech_017_4_clip_image002.gif" width="495" /></p>
<p>　　上表是个典型的跨行组运算报表，其中有比上期（跨行）和比去年同期（跨组）运算，这种报表在传统工具中常常必须编程准备数据。</p>
<p>　　再比如：</p>
<p><img height="248" alt="" src="http://www.runqian.com.cn/tech/tech_images/tech_017_4_clip_image004.jpg" width="553" /></p>
<p>　　展现了另一些动态格间运算，如计算排名，需要在同组中数出比当前值大的数的个数。下方的几个独立格中又引用了表格中数据，但又非整组全部引用，而是带了某种条件（前三名），最下方的一个格中还会引用到报表外的数据（北京市的全部销售额不在报表中）。</p>
<p>　　这两个报表的样式都不复杂，但这些格间运算会让传统工具非常为难，只能再次依靠程序代码，把数据事先计算好直接往报表里填。而在新一代报表工具中，采用动态格间计算的方法，实现起来将非常简单：</p>
<p><img height="205" alt="" src="http://www.runqian.com.cn/tech/tech_images/tech_017_4_clip_image006.jpg" width="519" /></p>
<p>　　在计算排名时，C4格使用动态层次坐标表达式=count(B4[`0;`0]{B4&gt;$b4})+1算出当前排名。</p>
<p>　　　　在统计部分，简单的使用了统计表达式的数据过滤来完成，如=sum(b4{c4&lt;=3})，计算排名号码在3（包含）一下的销售额，即总计。 </p>
<p align="left">&nbsp;</p>
<p><!-- InstanceEndEditable --></p>
<p><strong>五、行列对称</strong><strong></strong></p>
<p>　　看一看这个例子：</p>
<p><img height="204" alt="" src="http://www.runqian.com.cn/tech/tech_images/tech_017_5_clip_image002.jpg" width="553" />　　张表在纵向上并不复杂，相信对于Crystal Report或者其他许多类似的产品是很容易的。但它在横向上有两个难点，一是列不固定，实际是按数据进行了扩展，就如同典型的分组报表在纵向上的方式一样，二是内容复杂，并不是简单的、标准的两层分组。</p>
<p>　　这种报表很典型，然而传统工具对此几乎无能为力。</p>
<p>　　这是因为传统工具本质上来源于纵向分组模型，即行式表，先是解决打印数据表的问题，然后根据需要又加上了分组、合计等等，但其行列严重不对称，列方向能力远远弱于行方向，列一直是固定的，完全不支持列向变动。</p>
<p>　　而对于在横向扩展数据列的需求，传统工具提供了交叉表的方式。但是，交叉表非常死板，虽然可以支持多层变列，但只能有一片变列区，而且其中的汇总运算很简单，只有固定的一些函数，不可随便增加运算行列。象上面那个例子，在水平方向的展开并不是标准的先列数据再小计的方式，用交叉表实现起来就会很困难，假如再增加一列&#8220;与去年同期比&#8221;之类的，交叉表就更束手无策了。</p>
<p>　　新一代报表工具则采用了行列对称的模型，纵方向上拥有的能力与功能，完全可以在横方向上实现，彻底解决了上述问题。象我们所举的例子，在采用行列对称的模型的新一代报表工具中实现起来就会轻松得多。</p>
<p><br />
&nbsp;</p>
<p><strong>六、结语</strong></p>
<p>　　根据以上介绍，我们可以看到，正是由于报表需求的复杂性，使得基于传统模式的报表工具在处理很多报表时有较大的难度，面对一个个新的问题，可能出现一个个新的对应办法，分组、公式、交叉表、单元格合并、表格式设计器&#8230;&#8230;，但这实际只是一种不断&#8220;补&#8221;的方法。事实上，同一张报表中很可能包含了多种的问题，当这几种困难交织到一起时，整个问题的复杂度要远比解决几个单个问题的总和要大得多。这要求我们给出完整的解决方案，而不能单独分别处理。改良是必要的，但光是改良是不够的。</p>
<p>　　而报表工具的新的发展，是革命性的。它不仅仅是改良了报表工具的功能，更从根本上变革了报表的设计与实现方法，使原来复杂的事情变得简单，使原来不可能的事情成为可能，从而大幅度降低了报表设计的成本，提升了报表系统的性能，这才是报表系统的开发者所最关注的核心问题。</p>
<p>　　令人欣慰的是，基于上述新型模型的新一代报表产品-润乾报表，已经为很多开发商和用户应用。许多原来困扰于复杂报表制作的客户，已经从报表工具的革命中获益。新一代报表产品的实践，也证明了技术革命将能大大地为用户带来效益。</p>
<p>&nbsp;</p>
<!-- InstanceEndEditable -->
<img src ="http://www.cnblogs.com/datasky/aggbug/1238966.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42805/" target="_blank">[新闻]Google Knol 开始尝试有声版</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>算是.net的bug吗？</title><link>http://www.cnblogs.com/datasky/archive/2008/06/17/1223717.html</link><dc:creator>datasky</dc:creator><author>datasky</author><pubDate>Tue, 17 Jun 2008 03:54:00 GMT</pubDate><guid>http://www.cnblogs.com/datasky/archive/2008/06/17/1223717.html</guid><wfw:comment>http://www.cnblogs.com/datasky/comments/1223717.html</wfw:comment><comments>http://www.cnblogs.com/datasky/archive/2008/06/17/1223717.html#Feedback</comments><slash:comments>43</slash:comments><wfw:commentRss>http://www.cnblogs.com/datasky/comments/commentRss/1223717.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/datasky/services/trackbacks/1223717.html</trackback:ping><description><![CDATA[摘要: 在同一个页面上放置多个 DropDownList 或 ListBox ，不管这些列表控件的各自的选项是什么，只要设置了其中一个的选项是第几个，则其它所有的列表控件也同样受影响。请各位自己测试一下。&nbsp;&nbsp;<a href='http://www.cnblogs.com/datasky/archive/2008/06/17/1223717.html'>阅读全文</a><img src ="http://www.cnblogs.com/datasky/aggbug/1223717.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42804/" target="_blank">[新闻]12日电脑与人进行世纪对话 可思考机器或诞生</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>服务器响应HTTP的类型ContentType</title><link>http://www.cnblogs.com/datasky/archive/2008/06/02/1212028.html</link><dc:creator>datasky</dc:creator><author>datasky</author><pubDate>Mon, 02 Jun 2008 03:50:00 GMT</pubDate><guid>http://www.cnblogs.com/datasky/archive/2008/06/02/1212028.html</guid><wfw:comment>http://www.cnblogs.com/datasky/comments/1212028.html</wfw:comment><comments>http://www.cnblogs.com/datasky/archive/2008/06/02/1212028.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/datasky/comments/commentRss/1212028.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/datasky/services/trackbacks/1212028.html</trackback:ping><description><![CDATA[<div class="text_body">ContentType 属性指定服务器响应的 HTTP 内容类型。如果未指定 ContentType，默认为 text/html。<br />
<p>&nbsp;</p>
<p>&nbsp;</p>
<div class="code">&lt;%&nbsp;Response.ContentType&nbsp;=&nbsp;"text/HTML"&nbsp;%&gt; <br />
&lt;%&nbsp;Response.ContentType&nbsp;=&nbsp;"image/GIF"&nbsp;%&gt; <br />
&lt;%&nbsp;Response.ContentType&nbsp;=&nbsp;"image/JPEG"&nbsp;%&gt; <br />
&lt;%&nbsp;Response.ContentType&nbsp;=&nbsp;"text/plain"&nbsp;%&gt; <br />
&lt;%&nbsp;Response.ContentType&nbsp;=&nbsp;"image/JPEG"&nbsp;%&gt;</div>
<br />
<div class="code">".*"="application/octet-stream" <br />
".001"="application/x-001" <br />
".301"="application/x-301" <br />
".323"="text/h323" <br />
".906"="application/x-906" <br />
".907"="drawing/907" <br />
".a11"="application/x-a11" <br />
".acp"="audio/x-mei-aac" <br />
".ai"="application/postscript" <br />
".aif"="audio/aiff" <br />
".aifc"="audio/aiff" <br />
".aiff"="audio/aiff" <br />
".anv"="application/x-anv" <br />
".asa"="text/asa" <br />
".asf"="video/x-ms-asf" <br />
".asp"="text/asp" <br />
".asx"="video/x-ms-asf" <br />
".au"="audio/basic" <br />
".avi"="video/avi" <br />
".awf"="application/vnd.adobe.workflow" <br />
".biz"="text/xml" <br />
".bmp"="application/x-bmp" <br />
".bot"="application/x-bot" <br />
".c4t"="application/x-c4t" <br />
".c90"="application/x-c90" <br />
".cal"="application/x-cals" <br />
".cat"="application/vnd.ms-pki.seccat" <br />
".cdf"="application/x-netcdf" <br />
".cdr"="application/x-cdr" <br />
".cel"="application/x-cel" <br />
".cer"="application/x-x509-ca-cert" <br />
".cg4"="application/x-g4" <br />
".cgm"="application/x-cgm" <br />
".cit"="application/x-cit" <br />
".class"="java/*" <br />
".cml"="text/xml" <br />
".cmp"="application/x-cmp" <br />
".cmx"="application/x-cmx" <br />
".cot"="application/x-cot" <br />
".crl"="application/pkix-crl" <br />
".crt"="application/x-x509-ca-cert" <br />
".csi"="application/x-csi" <br />
".css"="text/css" <br />
".cut"="application/x-cut" <br />
".dbf"="application/x-dbf" <br />
".dbm"="application/x-dbm" <br />
".dbx"="application/x-dbx" <br />
".dcd"="text/xml" <br />
".dcx"="application/x-dcx" <br />
".der"="application/x-x509-ca-cert" <br />
".dgn"="application/x-dgn" <br />
".dib"="application/x-dib" <br />
".dll"="application/x-msdownload" <br />
".doc"="application/msword" <br />
".dot"="application/msword" <br />
".drw"="application/x-drw" <br />
".dtd"="text/xml" <br />
".dwf"="Model/vnd.dwf" <br />
".dwf"="application/x-dwf" <br />
".dwg"="application/x-dwg" <br />
".dxb"="application/x-dxb" <br />
".dxf"="application/x-dxf" <br />
".edn"="application/vnd.adobe.edn" <br />
".emf"="application/x-emf" <br />
".eml"="message/rfc822" <br />
".ent"="text/xml" <br />
".epi"="application/x-epi" <br />
".eps"="application/x-ps" <br />
".eps"="application/postscript" <br />
".etd"="application/x-ebx" <br />
".exe"="application/x-msdownload" <br />
".fax"="image/fax" <br />
".fdf"="application/vnd.fdf" <br />
".fif"="application/fractals" <br />
".fo"="text/xml" <br />
".frm"="application/x-frm" <br />
".g4"="application/x-g4" <br />
".gbr"="application/x-gbr" <br />
".gcd"="application/x-gcd" <br />
".gif"="image/gif" <br />
".gl2"="application/x-gl2" <br />
".gp4"="application/x-gp4" <br />
".hgl"="application/x-hgl" <br />
".hmr"="application/x-hmr" <br />
".hpg"="application/x-hpgl" <br />
".hpl"="application/x-hpl" <br />
".hqx"="application/mac-binhex40" <br />
".hrf"="application/x-hrf" <br />
".hta"="application/hta" <br />
".htc"="text/x-component" <br />
".htm"="text/html" <br />
".html"="text/html" <br />
".htt"="text/webviewhtml" <br />
".htx"="text/html" <br />
".icb"="application/x-icb" <br />
".ico"="image/x-icon" <br />
".ico"="application/x-ico" <br />
".iff"="application/x-iff" <br />
".ig4"="application/x-g4" <br />
".igs"="application/x-igs" <br />
".iii"="application/x-iphone" <br />
".img"="application/x-img" <br />
".ins"="application/x-internet-signup" <br />
".isp"="application/x-internet-signup" <br />
".IVF"="video/x-ivf" <br />
".java"="java/*" <br />
".jfif"="image/jpeg" <br />
".jpe"="image/jpeg" <br />
".jpe"="application/x-jpe" <br />
".jpeg"="image/jpeg" <br />
".jpg"="image/jpeg" <br />
".jpg"="application/x-jpg" <br />
".js"="application/x-javascript" <br />
".jsp"="text/html" <br />
".la1"="audio/x-liquid-file" <br />
".lar"="application/x-laplayer-reg" <br />
".latex"="application/x-latex" <br />
".lavs"="audio/x-liquid-secure" <br />
".lbm"="application/x-lbm" <br />
".lmsff"="audio/x-la-lms" <br />
".ls"="application/x-javascript" <br />
".ltr"="application/x-ltr" <br />
".m1v"="video/x-mpeg" <br />
".m2v"="video/x-mpeg" <br />
".m3u"="audio/mpegurl" <br />
".m4e"="video/mpeg4" <br />
".mac"="application/x-mac" <br />
".man"="application/x-troff-man" <br />
".math"="text/xml" <br />
".mdb"="application/msaccess" <br />
".mdb"="application/x-mdb" <br />
".mfp"="application/x-shockwave-flash" <br />
".mht"="message/rfc822" <br />
".mhtml"="message/rfc822" <br />
".mi"="application/x-mi" <br />
".mid"="audio/mid" <br />
".midi"="audio/mid" <br />
".mil"="application/x-mil" <br />
".mml"="text/xml" <br />
".mnd"="audio/x-musicnet-download" <br />
".mns"="audio/x-musicnet-stream" <br />
".mocha"="application/x-javascript" <br />
".movie"="video/x-sgi-movie" <br />
".mp1"="audio/mp1" <br />
".mp2"="audio/mp2" <br />
".mp2v"="video/mpeg" <br />
".mp3"="audio/mp3" <br />
".mp4"="video/mpeg4" <br />
".mpa"="video/x-mpg" <br />
".mpd"="application/vnd.ms-project" <br />
".mpe"="video/x-mpeg" <br />
".mpeg"="video/mpg" <br />
".mpg"="video/mpg" <br />
".mpga"="audio/rn-mpeg" <br />
".mpp"="application/vnd.ms-project" <br />
".mps"="video/x-mpeg" <br />
".mpt"="application/vnd.ms-project" <br />
".mpv"="video/mpg" <br />
".mpv2"="video/mpeg" <br />
".mpw"="application/vnd.ms-project" <br />
".mpx"="application/vnd.ms-project" <br />
".mtx"="text/xml" <br />
".mxp"="application/x-mmxp" <br />
".net"="image/pnetvue" <br />
".nrf"="application/x-nrf" <br />
".nws"="message/rfc822" <br />
".odc"="text/x-ms-odc" <br />
".out"="application/x-out" <br />
".p10"="application/pkcs10" <br />
".p12"="application/x-pkcs12" <br />
".p7b"="application/x-pkcs7-certificates" <br />
".p7c"="application/pkcs7-mime" <br />
".p7m"="application/pkcs7-mime" <br />
".p7r"="application/x-pkcs7-certreqresp" <br />
".p7s"="application/pkcs7-signature" <br />
".pc5"="application/x-pc5" <br />
".pci"="application/x-pci" <br />
".pcl"="application/x-pcl" <br />
".pcx"="application/x-pcx" <br />
".pdf"="application/pdf" <br />
".pdf"="application/pdf" <br />
".pdx"="application/vnd.adobe.pdx" <br />
".pfx"="application/x-pkcs12" <br />
".pgl"="application/x-pgl" <br />
".pic"="application/x-pic" <br />
".pko"="application/vnd.ms-pki.pko" <br />
".pl"="application/x-perl" <br />
".plg"="text/html" <br />
".pls"="audio/scpls" <br />
".plt"="application/x-plt" <br />
".png"="image/png" <br />
".png"="application/x-png" <br />
".pot"="application/vnd.ms-powerpoint" <br />
".ppa"="application/vnd.ms-powerpoint" <br />
".ppm"="application/x-ppm" <br />
".pps"="application/vnd.ms-powerpoint" <br />
".ppt"="application/vnd.ms-powerpoint" <br />
".ppt"="application/x-ppt" <br />
".pr"="application/x-pr" <br />
".prf"="application/pics-rules" <br />
".prn"="application/x-prn" <br />
".prt"="application/x-prt" <br />
".ps"="application/x-ps" <br />
".ps"="application/postscript" <br />
".ptn"="application/x-ptn" <br />
".pwz"="application/vnd.ms-powerpoint" <br />
".r3t"="text/vnd.rn-realtext3d" <br />
".ra"="audio/vnd.rn-realaudio" <br />
".ram"="audio/x-pn-realaudio" <br />
".ras"="application/x-ras" <br />
".rat"="application/rat-file" <br />
".rdf"="text/xml" <br />
".rec"="application/vnd.rn-recording" <br />
".red"="application/x-red" <br />
".rgb"="application/x-rgb" <br />
".rjs"="application/vnd.rn-realsystem-rjs" <br />
".rjt"="application/vnd.rn-realsystem-rjt" <br />
".rlc"="application/x-rlc" <br />
".rle"="application/x-rle" <br />
".rm"="application/vnd.rn-realmedia" <br />
".rmf"="application/vnd.adobe.rmf" <br />
".rmi"="audio/mid" <br />
".rmj"="application/vnd.rn-realsystem-rmj" <br />
".rmm"="audio/x-pn-realaudio" <br />
".rmp"="application/vnd.rn-rn_music_package" <br />
".rms"="application/vnd.rn-realmedia-secure" <br />
".rmvb"="application/vnd.rn-realmedia-vbr" <br />
".rmx"="application/vnd.rn-realsystem-rmx" <br />
".rnx"="application/vnd.rn-realplayer" <br />
".rp"="image/vnd.rn-realpix" <br />
".rpm"="audio/x-pn-realaudio-plugin" <br />
".rsml"="application/vnd.rn-rsml" <br />
".rt"="text/vnd.rn-realtext" <br />
".rtf"="application/msword" <br />
".rtf"="application/x-rtf" <br />
".rv"="video/vnd.rn-realvideo" <br />
".sam"="application/x-sam" <br />
".sat"="application/x-sat" <br />
".sdp"="application/sdp" <br />
".sdw"="application/x-sdw" <br />
".sit"="application/x-stuffit" <br />
".slb"="application/x-slb" <br />
".sld"="application/x-sld" <br />
".slk"="drawing/x-slk" <br />
".smi"="application/smil" <br />
".smil"="application/smil" <br />
".smk"="application/x-smk" <br />
".snd"="audio/basic" <br />
".sol"="text/plain" <br />
".sor"="text/plain" <br />
".spc"="application/x-pkcs7-certificates" <br />
".spl"="application/futuresplash" <br />
".spp"="text/xml" <br />
".ssm"="application/streamingmedia" <br />
".sst"="application/vnd.ms-pki.certstore" <br />
".stl"="application/vnd.ms-pki.stl" <br />
".stm"="text/html" <br />
".sty"="application/x-sty" <br />
".svg"="text/xml" <br />
".swf"="application/x-shockwave-flash" <br />
".tdf"="application/x-tdf" <br />
".tg4"="application/x-tg4" <br />
".tga"="application/x-tga" <br />
".tif"="image/tiff" <br />
".tif"="application/x-tif" <br />
".tiff"="image/tiff" <br />
".tld"="text/xml" <br />
".top"="drawing/x-top" <br />
".torrent"="application/x-bittorrent" <br />
".tsd"="text/xml" <br />
".txt"="text/plain" <br />
".uin"="application/x-icq" <br />
".uls"="text/iuls" <br />
".vcf"="text/x-vcard" <br />
".vda"="application/x-vda" <br />
".vdx"="application/vnd.visio" <br />
".vml"="text/xml" <br />
".vpg"="application/x-vpeg005" <br />
".vsd"="application/vnd.visio" <br />
".vsd"="application/x-vsd" <br />
".vss"="application/vnd.visio" <br />
".vst"="application/vnd.visio" <br />
".vst"="application/x-vst" <br />
".vsw"="application/vnd.visio" <br />
".vsx"="application/vnd.visio" <br />
".vtx"="application/vnd.visio" <br />
".vxml"="text/xml" <br />
".wav"="audio/wav" <br />
".wax"="audio/x-ms-wax" <br />
".wb1"="application/x-wb1" <br />
".wb2"="application/x-wb2" <br />
".wb3"="application/x-wb3" <br />
".wbmp"="image/vnd.wap.wbmp" <br />
".wiz"="application/msword" <br />
".wk3"="application/x-wk3" <br />
".wk4"="application/x-wk4" <br />
".wkq"="application/x-wkq" <br />
".wks"="application/x-wks" <br />
".wm"="video/x-ms-wm" <br />
".wma"="audio/x-ms-wma" <br />
".wmd"="application/x-ms-wmd" <br />
".wmf"="application/x-wmf" <br />
".wml"="text/vnd.wap.wml" <br />
".wmv"="video/x-ms-wmv" <br />
".wmx"="video/x-ms-wmx" <br />
".wmz"="application/x-ms-wmz" <br />
".wp6"="application/x-wp6" <br />
".wpd"="application/x-wpd" <br />
".wpg"="application/x-wpg" <br />
".wpl"="application/vnd.ms-wpl" <br />
".wq1"="application/x-wq1" <br />
".wr1"="application/x-wr1" <br />
".wri"="application/x-wri" <br />
".wrk"="application/x-wrk" <br />
".ws"="application/x-ws" <br />
".ws2"="application/x-ws" <br />
".wsc"="text/scriptlet" <br />
".wsdl"="text/xml" <br />
".wvx"="video/x-ms-wvx" <br />
".xdp"="application/vnd.adobe.xdp" <br />
".xdr"="text/xml" <br />
".xfd"="application/vnd.adobe.xfd" <br />
".xfdf"="application/vnd.adobe.xfdf" <br />
".xhtml"="text/html" <br />
".xls"="application/vnd.ms-excel" <br />
".xls"="application/x-xls" <br />
".xlw"="application/x-xlw" <br />
".xml"="text/xml" <br />
".xpl"="audio/scpls" <br />
".xq"="text/xml" <br />
".xql"="text/xml" <br />
".xquery"="text/xml" <br />
".xsd"="text/xml" <br />
".xsl"="text/xml" <br />
".xslt"="text/xml" <br />
".xwd"="application/x-xwd" <br />
".x_b"="application/x-x_b" <br />
".x_t"="application/x-x_t"</div>
</div>
<div class="from_ad"><SCRIPT language=javascript src="/ad/js/articlebottom_ad.js"></SCRIPT></div>
<img src ="http://www.cnblogs.com/datasky/aggbug/1212028.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42803/" target="_blank">[新闻]人民网评:中国移动为什么要抛弃iPhone?</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>无限级别的分类</title><link>http://www.cnblogs.com/datasky/archive/2008/05/26/1207325.html</link><dc:creator>datasky</dc:creator><author>datasky</author><pubDate>Mon, 26 May 2008 02:11:00 GMT</pubDate><guid>http://www.cnblogs.com/datasky/archive/2008/05/26/1207325.html</guid><wfw:comment>http://www.cnblogs.com/datasky/comments/1207325.html</wfw:comment><comments>http://www.cnblogs.com/datasky/archive/2008/05/26/1207325.html#Feedback</comments><slash:comments>27</slash:comments><wfw:commentRss>http://www.cnblogs.com/datasky/comments/commentRss/1207325.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/datasky/services/trackbacks/1207325.html</trackback:ping><description><![CDATA[摘要: 无限级别的分类，很多项目中需要，就设计了一个，欢迎大家批评指正。&nbsp;&nbsp;<a href='http://www.cnblogs.com/datasky/archive/2008/05/26/1207325.html'>阅读全文</a><img src ="http://www.cnblogs.com/datasky/aggbug/1207325.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42802/" target="_blank">[新闻]索尼推出第二代触控屏eBook电子书</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>CSS优先级问题</title><link>http://www.cnblogs.com/datasky/archive/2008/04/14/1153119.html</link><dc:creator>datasky</dc:creator><author>datasky</author><pubDate>Mon, 14 Apr 2008 10:00:00 GMT</pubDate><guid>http://www.cnblogs.com/datasky/archive/2008/04/14/1153119.html</guid><wfw:comment>http://www.cnblogs.com/datasky/comments/1153119.html</wfw:comment><comments>http://www.cnblogs.com/datasky/archive/2008/04/14/1153119.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/datasky/comments/commentRss/1153119.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/datasky/services/trackbacks/1153119.html</trackback:ping><description><![CDATA[<p>CSS优先级包含四个级别（文内选择符，ID选择符，Class选择符，元素选择符）以及各级别出现的次数。根据这四个级别出现的次数计算得到CSS的优先级。</p>
<p>CSS优先级的计算规则如下：<br />
* 页面中定义的样式,加1,0,0,0<br />
* 每个ID选择符(如 #id),加0,1,0,0<br />
* 每个Class选择符(如 .class)、每个属性选择符(如 [attribute=])、每个伪类(如 :hover)加0,0,1,0<br />
* 每个元素选择符（如p）或伪元素选择符(如 :firstchild)等，加0,0,0,1<br />
然后，将这四个数字分别累加，就得到每个CSS定义的优先级的值，<br />
然后从左到右逐位比较大小，数字大的CSS样式的优先级就高。</p>
<p>例子：<br />
css文件或&lt;style&gt;中如下定义：<br />
1. h1 {color: red;}<br />
/* 一个元素选择符，结果是0,0,0,1 */<br />
2. body h1 {color: green;}<br />
/* 两个元素选择符，结果是 0,0,0,2 */<br />
3. h2.grape {color: purple;}<br />
/* 一个元素选择符、一个Class选择符，结果是 0,0,1,1*/<br />
4. li#answer {color: navy;}<br />
/* 一个元素选择符，一个ID选择符，结果是0,1,0,1 */<br />
元素的style属性中如下定义：<br />
h1 {color: blue;}<br />
/* 页面中定义，一个元素选择符，结果是1,0,0,1*/</p>
<p>如此以来，h1元素的颜色是蓝色。<br />
注意：<br />
1、!important声明的样式优先级最高，如果冲突再进行计算。<br />
2、如果优先级相同，则选择最后出现的样式。<br />
3、继承得到的样式的优先级最低。</p>
<img src ="http://www.cnblogs.com/datasky/aggbug/1153119.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42801/" target="_blank">[新闻]百付宝加入战团 电子支付市场寻突破</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>在Linux上构建ASP.NET环境</title><link>http://www.cnblogs.com/datasky/archive/2008/03/21/1116662.html</link><dc:creator>datasky</dc:creator><author>datasky</author><pubDate>Fri, 21 Mar 2008 08:22:00 GMT</pubDate><guid>http://www.cnblogs.com/datasky/archive/2008/03/21/1116662.html</guid><wfw:comment>http://www.cnblogs.com/datasky/comments/1116662.html</wfw:comment><comments>http://www.cnblogs.com/datasky/archive/2008/03/21/1116662.html#Feedback</comments><slash:comments>10</slash:comments><wfw:commentRss>http://www.cnblogs.com/datasky/comments/commentRss/1116662.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/datasky/services/trackbacks/1116662.html</trackback:ping><description><![CDATA[<p><font face="Verdana">在Linux上安装mono,xsp,mod_mono后，可以构建一个ASP.NET环境，Mono项目是由Novell支持的。<br />
mono官网地址：<font face="Verdana"><a href="http://www.mono-project.com">http://www.mono-project.com</a> </font><br />
mono下载页面：<font face="Verdana"><a href="http://www.go-mono.com/mono-downloads/download.html">http://www.go-mono.com/mono-downloads/download.html</a></font><br />
XSP是一个轻量级的Web服务器，它是用100%的C#代码写成的纯.Net应用程序。<br />
下面的安装环境是: Red Hat Enterprise Linux 4 AS ,&nbsp; mono 1.2.6<br />
===================================================================================<br />
如果用rpm包安装则顺序如下：apache是采用系统自带的 2.0.59<br />
===================================================================================<br />
libgdiplus<br />
mono-core<br />
mono-data<br />
mono-data-firebird<br />
mono-data-oracle<br />
mono-data-postgresql<br />
mono-data-sqlite<br />
mono-data-sybase<br />
ibm-data-db2<br />
mono-nunit<br />
mono-locale-extras<br />
rpm -ivh mono-web-1.2.6-4.novell.i586.rpm --nodeps <br />
//上面这个web和下面的winforms相互依赖，所以加上了—nodeps参数<br />
mono-winforms<br />
mono-devel<br />
mono-extras <br />
mono-jscript <br />
mono-basic<br />
bytefx-data-mysql<br />
mono-complete</font></p>
<p><font face="Verdana">xsp</font></p>
<p><font face="Verdana">mod_mono</font></p>
<p><font face="Verdana">说明：<br />
---------<br />
/usr/sbin&nbsp; 目录下 有apache命令执行文件<br />
/etc/httpd 目录下 有apache配置文件<br />
/etc/httpd/modules 和 /usr/lib/httpd/modules 文件完全一样</font></p>
<p><font face="Verdana">mono 安装后 /usr/lib/mono&nbsp; 和 /etc/mono 都有文件但有所不同<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /usr/bin 下面有 mono 命令执行文件 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
xsp&nbsp; 安装后 /usr/lib/xsp&nbsp; 有文件，含test文件夹<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /usr/bin 下面有 xsp 命令执行文件 </font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 安装成功，在终端中输入 xsp --root /usr/lib/xsp/test 回车后，<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 打开网页浏览器，输入 http://localhost:8080/，会出现XSP的欢迎页面</font></p>
<p><font face="Verdana">mod_mono 安装后 /etc/httpd/modules 和 /usr/lib/httpd/modules 多了mod_mono.so文件<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /usr/bin 下面有 mod-mono-server 和 mod-mono-server2 命令执行文件</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 根目录下面会自动产生 /conf.d/mod_mono.conf 配置文件，<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 将此文件拷贝到 /etc/httpd/conf.d/ 中，<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这个文件将被自动加载到 /etc/httpd/conf/httpd.conf中，<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 因为打开httpd.conf文件可以看到&nbsp; Include conf.d/*.conf</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 然后在 /etc/httpd/conf/httpd.conf 中最下面加上：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Alias /demo "/usr/lib/xsp/test"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AddMonoApplications default "/demo:/usr/lib/xsp/test"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #如果要运行的.NET版本是2.0，还需要加上下面这一句<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MonoServerPath /usr/bin/mod-mono-server2 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Location /demo&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SetHandler mono<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/Location&gt;</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 重新启动apache进行测试：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在终端中输入&nbsp;&nbsp; apachectl restart<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 打开网页浏览器，输入 http://localhost/demo/，会出现XSP的欢迎页面</font></p>
<p><font face="Verdana">====================================================================================<br />
如果用源码安装则顺序如下：不用系统自带的apache，我们自己安装一个，好指定路径。<br />
====================================================================================<br />
编译apache <br />
./configure&nbsp; [不设置--prefix=/usr的话，默认是/usr/local/apache2，这里采用的是默认]<br />
make<br />
make install</font></p>
<p><font face="Verdana">编译mono 这个过程需要很长时间，需要耐心等待。<br />
./configure --prefix=/usr<br />
make<br />
make install</font></p>
<p><font face="Verdana">编译xsp<br />
./configure --prefix=/usr<br />
make<br />
make install<br />
安装成功，在终端中输入 xsp --root /usr/lib/xsp/test 回车后，<br />
打开网页浏览器，输入 http://localhost:8080/，会出现XSP的欢迎页面</font></p>
<p><font face="Verdana">编译mod_mono<br />
./configure --with-apxs=/usr/local/apache2/bin/apxs&nbsp; [要看apache位置情况来设置]<br />
make<br />
make install </font></p>
<font face="Verdana">
<p><br />
然后配置 apache 的配置文件：<br />
进入 /usr/local/apache2/conf ，应该看到mod_mono.conf已经存在了，<br />
需要将其包含到httpd.conf里边，打开httpd.conf并加入下面代码：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Include /usr/local/apache2/conf/mod_mono.conf<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Alias /demo "/usr/lib/xsp/test"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #如果要运行的.NET版本是2.0，还需要加上下面这一句<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AddMonoApplications default "/demo:/usr/lib/xsp/test"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MonoServerPath /usr/bin/mod-mono-server2<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Location /demo&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SetHandler mono<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/Location&gt;</p>
<p>重新启动apache进行测试：<br />
在终端中输入 /usr/local/apache2/bin/apachectl restart<br />
打开网页浏览器，输入 http://localhost/demo/，会出现XSP的欢迎页面</p>
<p></font>&nbsp;----------------------------------------------------------------------------------<br />
我的目的是要在linux下面运行 asp.net 2.0 + oracle, 可惜结果如下：</p>
<p>如果使用的数据库是sql server，则不论是xsp还是apache+mod_mono做服务器均没有问题；</p>
<p>如果使用的数据库是oracle，则xsp服务器可以支持直接在页面文件写代码形式的程序，带有调用自己预编译文件的程序则无法运行，会出错，如果用apache+mod_mono做服务器则不论什么方式的编写的程序都无法运行，提示找不到libclntsh.so；</p>
-----------------------------------------------------------------------------------<br />
有成功经验的，请指教，谢谢！<br />
<br />
 <img src ="http://www.cnblogs.com/datasky/aggbug/1116662.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42800/" target="_blank">[新闻]邮件标准协议英文独占时代终结</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>windows server 2008/Visual Studio 2008/下载地址和序列号</title><link>http://www.cnblogs.com/datasky/archive/2008/03/21/1116649.html</link><dc:creator>datasky</dc:creator><author>datasky</author><pubDate>Fri, 21 Mar 2008 08:18:00 GMT</pubDate><guid>http://www.cnblogs.com/datasky/archive/2008/03/21/1116649.html</guid><wfw:comment>http://www.cnblogs.com/datasky/comments/1116649.html</wfw:comment><comments>http://www.cnblogs.com/datasky/archive/2008/03/21/1116649.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/datasky/comments/commentRss/1116649.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/datasky/services/trackbacks/1116649.html</trackback:ping><description><![CDATA[<p><font face="Verdana"><font face="Verdana">Visual Studio 2008</font>2008简体中文正式版（90天试用版）下载地址：<br />
<a href="http://download.microsoft.com/download/e/7/7/e777851c-c1a4-4979-86b3-6886953b32e9/VS2008ProEdition90DayTrialCHSX1435983.iso">http://download.microsoft.com/download/e/7/7/e777851c-c1a4-4979-86b3-6886953b32e9/VS2008ProEdition90DayTrialCHSX1435983.iso</a><br />
</font><font face="Verdana"><br />
把90天试用版改为正式版方法:<br />
安装完成后，在&#8220;控制面板&#8221;中启动&#8220;添加删除程序&#8221;，选中<font face="Verdana">Visual Studio 2008</font>，点击&#8220;更改、删除&#8221;，输入序列号:PYHYP-WXB3B-B2CCM-V9DX9-VDY8T<br />
---------------------------------------------------<br />
<br />
<font face="Verdana">windows server 2008简体中文正式版下载地址：<br />
</font><font face="Verdana"><a href="http://fcv.cn/tmp/zh-Hans_windows_server_2008_datacenter_enterprise_standard_x86_dvd_x14-26742.iso">http://fcv.cn/tmp/zh-Hans_windows_server_2008_datacenter_enterprise_standard_x86_dvd_x14-26742.iso</a></font><br />
</p>
<p><font face="Verdana">Windows Server 2008 Standard 序列号:</font></p>
<p><font face="Verdana">PV327-2CJ4B-MPQ7F-T4WWW-XFFGG<br />
RGM39-FDXDP-YJMVH-973PP-8BWKY <br />
D23QX-D26DY-KDY3M-DW27R-C7YPF<br />
88DGV-643XW-GCWBC-49YXB-J4G88<br />
37M2P-Y8V3R-CG2TQ-36QPB-WXK6T</font></p>
<p><font face="Verdana">Windows Server 2008 Enterprise 序列号:</font></p>
<p><font face="Verdana">CVKBP-XDDHC-RJRK8-MDKFB-F8JXH<br />
VR9JX-TGTXQ-M9XYY-9G87Y-8JPGV<br />
RCDCH-2RH7Q-M4RK3-HG9MY-B72JW<br />
C4KWH-H9FJF-9JGJJ-JQQ4M-B87XW<br />
PWDHP-JTTX4-XM4YV-FDCVG-9Q6YY</font></p>
<p><font face="Verdana">Windows Server 2008 Datacenter 序列号:</font></p>
<p><font face="Verdana">BR6KD-MMX7W-RWHKV-QMQMV-2CQVT<br />
9C3QW-TDQ48-GR9KC-YCRDK-3C936<br />
6T6BV-9VPRV-GHJC6-6GDHJ-QM68K<br />
CRRCJ-2MK4C-FFMXX-77YTG-PDD4M<br />
33JHD-349J8-FJ6R6-DK3T3-R3HPQ<br />
----------------------------------------------------------<br />
<br />
Office 2007 简体中文专业版下载地址：<br />
<font face="Verdana"><a href="http://www.ffxyx.com/hlj01.com/office2007pro.chs.rar">http://www.ffxyx.com/hlj01.com/office2007pro.chs.rar</a> <br />
</font>Office 2007 简体中文企业版下载地址：<br />
<font face="Verdana"><a href="http://218.75.46.114:8088/MicrosoftOfficeEnterprise2007.iso">http://218.75.46.114:8088/MicrosoftOfficeEnterprise2007.iso</a> </font><br />
<br />
<font face="Verdana">Office 2007 CD-Key: DBXYD-TF477-46YM4-W74MH-6YDQ8<br />
<br />
</font></font></p>
</font>
 <img src ="http://www.cnblogs.com/datasky/aggbug/1116649.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42800/" target="_blank">[新闻]邮件标准协议英文独占时代终结</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>sql server 修改逻辑文件名</title><link>http://www.cnblogs.com/datasky/archive/2007/12/10/989596.html</link><dc:creator>datasky</dc:creator><author>datasky</author><pubDate>Mon, 10 Dec 2007 08:34:00 GMT</pubDate><guid>http://www.cnblogs.com/datasky/archive/2007/12/10/989596.html</guid><wfw:comment>http://www.cnblogs.com/datasky/comments/989596.html</wfw:comment><comments>http://www.cnblogs.com/datasky/archive/2007/12/10/989596.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/datasky/comments/commentRss/989596.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/datasky/services/trackbacks/989596.html</trackback:ping><description><![CDATA[<p><font face="Courier New">alter database db001</font></p>
<p><font face="Courier New">modify file(name='db001_data',newname = 'db002_data')</font> </p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><font face="Courier New">alter database db001</font></p>
<p><font face="Courier New">modify file(name='db001_log',newname = 'db002_log')</font> </p>
<img src ="http://www.cnblogs.com/datasky/aggbug/989596.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42799/" target="_blank">[新闻]2008年10月6日科技博客精选</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>[转]米莱语录</title><link>http://www.cnblogs.com/datasky/archive/2007/11/25/971806.html</link><dc:creator>datasky</dc:creator><author>datasky</author><pubDate>Sun, 25 Nov 2007 08:41:00 GMT</pubDate><guid>http://www.cnblogs.com/datasky/archive/2007/11/25/971806.html</guid><wfw:comment>http://www.cnblogs.com/datasky/comments/971806.html</wfw:comment><comments>http://www.cnblogs.com/datasky/archive/2007/11/25/971806.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/datasky/comments/commentRss/971806.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/datasky/services/trackbacks/971806.html</trackback:ping><description><![CDATA[1.&nbsp;不许你跟别的女照相，我才是你的女朋友！<br />
2.&nbsp;甭看了，剩下的都菜瓜，本校校花就在你怀里。<br />
3.&nbsp;记住，在这个世界上，男人女人各有分工，男人主要用来对女人使坏，女人主要用来对男人好，以前我对这种混蛋分工特不满意。可是现在，我认命了。<br />
4.&nbsp;现在的社会风气实在太坏了。<br />
5.&nbsp;你好傻啊，你一点也不理解我，我刚才说的一切，所有的一切，那才是我幸福。<br />
6.&nbsp;（医生：你父亲得的是胆结实。）&nbsp;米莱：大夫，那我爸这&#8230;&nbsp;（医生：没事我们会通过手术把它切除的。）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;米莱：啊，那我爸以后是不是就没胆了？<br />
7.&nbsp;洗干净了人模狗样去工作吧！<br />
8.&nbsp;如果你还在这个世界存在着，那么这个世界无论什么样，对我都有是有意义的.但是如果你不在了，无论这个世界有多么好，他在我眼里也只是一片荒漠。而我就像是一个狐魂野鬼。还记得吗？《呼啸山庄》，记住，这是我最喜欢的一段话，以前上学的时候我念给你听，你说太酸了，受不了。我现在告诉你，我觉得一点儿都在酸，而且每一个字都让我特激动。<br />
9.&nbsp;就杨晓芸那品味，我告诉你啊，你给她三万，她愣给你装出十万的效果来。可如果你给她三十万，效果还是十万。<br />
10.&nbsp;少女变大嫂，早恋变单身了，文秘变老总，一失足成行古恨。还我青春！<br />
11.&nbsp;有时候我想，要是我是夏琳，那有多好。你知道我会怎么做吗？我绝对不会让你去有发展的公司，干什么事业。我要你去找挣钱少，但是清闲的工作，天天跟泡在一起，看电影、去迪厅、看展览、接着过学校的生活。把这种生活能延长多久就延长多久，我们俩还可以攒钱买奇瑞ＱＱ，还是那个分期付款的那一种，周末跟华子，向南去AA制的小饭馆大餐，晚上去打台球，或者回家看DVD，我靠在你肩膀上，把每个月挣的钱花到只剩最后一块，然后分头回家蹭饭吃。没有公司，没有什么儿需要解决，没有应酬，没有别人，只为自己活着，我为你，你为我。你知道吗？我有的时候听杨晓芸向我报怨他跟向南的事儿，我有羡慕。不管有什么恩恩怨怨，他们天天都能在一起，天天都能。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;（其实她只是个女孩）<br />
12.&nbsp;你打啊，当着我的面打，二十个电话你一个一个打。你不全都记住了吗？你要是没记住，没事儿，我告诉你。我连关鹏电话一起告诉你。<br />
13.&nbsp;你们问你快乐吗？我告诉你们我一点儿也不快乐。你们问我对未来有信心吗？我告诉你们我连信心是什么东西我都不知道。你们问我为什么喝了这么多酒？我告诉你们，我很矛盾，我很不开心。有一件事我一直弄不明白，我很奇怪，那就是，为什么生来我都有，却得不到自己最想要？我尝试去美国，尝试干事业，我努力投入积极的生活，我不想放弃希望，却为那些重要的事情而奋斗，但最后，一切都失败。<br />
14.&nbsp;小仙儿，以前你只是一乌鸦嘴，没成想住进来没几天就有所长进啦。知道吗？你现在已经参与破坏别人家庭及婚姻的各种活动，不简单啊！<br />
15.&nbsp;我就等你，就等你，你没结婚我等你，你结了婚，我还等，我现在等你，我以后等你，我永远等你，我等你，我等你，我等死你&#8230;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;（这句是最感人的）<br />
16.&nbsp;住嘴，你只要记住最后一点就够了，那就是只要允许我对你好，我就高兴。你要是敢不允许，我就是不高兴，这就是我这个老姑娘的怪脾气。哼！<br />
17.&nbsp;我老想，脑袋自个儿就会转，一想到你，心就会砰砰地跳，根本控制不住，你要是没离开我吧，我还真不知道自己能这么想你，你又是第一个离开我的人。你为什么会离开我呢?<br />
18.&nbsp;记得第一次发现你和夏琳在一起，我快疯了。在我心里接下来只有两个结果：要么我嫁给你，要么我永远不见你。现在这么多年过去了，你看我们还在一起，我也没有不见你，也没有嫁给你，所以那个时候的想法就是极端的。<br />
19.&nbsp;走吧，陪我旧地重游一次吧。<br />
20.&nbsp;跟夏琳在一起的时候，你一会儿兴高采烈，一会儿垂头丧气的完全像个蠢货。现在夏琳走了，你归我，等她回来以后，我要让你变回那个了不起的陆涛，我要把你推到她面前，让她好好看一看，到底我们俩谁对你好。<br />
21.&nbsp;我连想都不愿意想，我一想就失望，我真失望，我太失望了，我一直觉得，我一直在幻想，通过自己的努力，也许有一天能最终得到陆涛，哪怕得不到他，我能天天见到他也会很开心，除了他，我没有爱过任何一个人，也没有想过去爱什么人，我离不开，我也舍不得，在我的心里只有陆涛，就有陆涛，可是你又回来了，我一下子明白了，有些东西即使你再努力也是得不到的。<br />
22.&nbsp;米莱：也没什么，我陪我们家上坟，突然想起你了。&nbsp;(陆涛：哎哟你可真会想&nbsp;你又不是给我上坟)<br />
23.&nbsp;那是我以前最幸福的地儿了，直到现在我再也没有去过肯德基，就美国的我也没去过，我恨全世界的肯德基。其实我是害怕全世界的肯德基，因为那是我的伤心地儿。<br />
24.&nbsp;我要把你贴得满世界都是，这是第一贴。早知道就让他们在大头贴下面加一行字：两个分手的人。<br />
25.&nbsp;我这不是怕被夏琳逮着吗！我跟你开玩笑的，我是急着旧地重游，看看你这小窝变成什么样了？<br />
26.&nbsp;作为你过期的女友，我也就配喝这过期的可乐。毒死我算了。<br />
27.&nbsp;别往我这性感的美腿上看，回头口水掉我伤口上了，化脓了我跟你没完啊。<br />
28.&nbsp;对了，有一天下午放学，我一个人走有校园的路上，哭丧脸，觉着特没劲。突然，有一女教授，骑着辆旧自行车停在我面前，指着我大声对我说：&#8220;多好的天气啊，小姑娘，爱情没有了还有别的，挺起胸，打起精神来。&#8221;说着她对我做了一个挺胸的动作，笑了笑，骑上车就走了。唉哟喂，这一下子我觉得生活充满了新鲜感，后来我时常想起这个幕，每次想我都觉得特有勇气，就好像有人在背后推了我一下似的。<br />
29.&nbsp;我已经忘了，我连冰淇淋是什么口味儿我都忘了，我再也没吃过冰淇淋。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;（最悲的一句了）<br />
30.&nbsp;我想唱。以前上学的时候，我就有个心愿，就是只为你一个人唱歌。左边。我就唱左边。<br />
31.&nbsp;以前你总坑富家女。你跟向南，华子一起，用各种玩笑骗我为你们付账，结果养成了我一个坏习惯，就是愿为你们刷卡。你们吃得越多，我就越开心，我在地摊上买的衣服，拿回去让夏琳随便改两下，再让晓芸往上缝上点儿什么东西，就跟我爸说是两千块一件的，我爸从来都相信我，他觉得我穿什么都好看。其实，我的衣服才是我们三个女孩中最便宜的，你知道吗？<br />
32.&nbsp;我跟你讲一道理，你听清楚了，让我付账是应该的，但是离开我是不应该的。你那么坏，我还是喜欢你，喜欢你犯坏之前那种眼神，坏主意都是你先想出来的，然后跟你的狗腿子华子，向南，你们三个相互看一眼，笑一下，然后就开始捣乱，我觉得特痛快。我爱跟着你们，我喜欢看你们无法无天的表演。我买一张话剧票，你坐那一会儿工夫就画出三张来，然后大家一起去看话剧。我的脸脏了，你就偷别人汽车里的纸巾给我擦脸。我特羡慕你们，因为你们是男孩子，走到哪儿都会引起罢，被抓住了也无所谓，我喜欢看你满不在乎的样子，我觉得特来劲特帅。其实我一直想变成一个男孩儿，跟着你们一起干，可是我是个女孩儿，所以我只能在后面为你们望风，为你们刷卡，然后想办法捞你们。<br />
33.&nbsp;你早就应该对我说这句话了，我就是想听你亲口跟我说这一句话。我们做了所有能做的了，没有遗憾，我会记住跟你在一起的日子，记住那种感情，所有的一切都是真的，还过很多的美好，再见。<br />
34.&nbsp;我不明白，非常不明白。<br />
35.&nbsp;真正的原因是：我就喜欢为你做各种事情，我好像一直在等着为你做各种事情。以前轮不到我，现在我从队尾排到了第一了。<br />
36.&nbsp;要大休等死了以后有的是时间，活着就得折腾折腾！<br />
37.&nbsp;滚！！！呸！！！&nbsp;
<img src ="http://www.cnblogs.com/datasky/aggbug/971806.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42798/" target="_blank">[新闻]福布斯：Web3.0尚未到来 仍需5到7年</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>中文域名如何在服务器里绑定主机头？</title><link>http://www.cnblogs.com/datasky/archive/2007/11/15/959838.html</link><dc:creator>datasky</dc:creator><author>datasky</author><pubDate>Thu, 15 Nov 2007 00:50:00 GMT</pubDate><guid>http://www.cnblogs.com/datasky/archive/2007/11/15/959838.html</guid><wfw:comment>http://www.cnblogs.com/datasky/comments/959838.html</wfw:comment><comments>http://www.cnblogs.com/datasky/archive/2007/11/15/959838.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/datasky/comments/commentRss/959838.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/datasky/services/trackbacks/959838.html</trackback:ping><description><![CDATA[到<a href="http://cnnic.cn/html/Dir/2003/10/29/1112.htm"><a href="http://cnnic.cn/html/Dir/2003/10/29/1112.htm" target="_blank"><font color="#415418">http://www.cnnic.cn/html/Dir/2003/10/29/1112.htm</font></a></a>&nbsp;把中文域名转码，然后绑定即可。
<img src ="http://www.cnblogs.com/datasky/aggbug/959838.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42796/" target="_blank">[新闻]Google Gears:离线应用并非唯一的使命</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>Access, SQL Server, and Oracle数据类型的对应关系</title><link>http://www.cnblogs.com/datasky/archive/2007/11/07/952157.html</link><dc:creator>datasky</dc:creator><author>datasky</author><pubDate>Wed, 07 Nov 2007 06:42:00 GMT</pubDate><guid>http://www.cnblogs.com/datasky/archive/2007/11/07/952157.html</guid><wfw:comment>http://www.cnblogs.com/datasky/comments/952157.html</wfw:comment><comments>http://www.cnblogs.com/datasky/archive/2007/11/07/952157.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/datasky/comments/commentRss/952157.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/datasky/services/trackbacks/952157.html</trackback:ping><description><![CDATA[<div class="NewsContent" id="NewsContentLabel">
<p>The table below shows the ADO Data Type mapping between Access, SQL Server, and Oracle:</p>
<table class="ex" cellspacing="0" cellpadding="3" width="100%" border="1">
    <tbody>
        <tr valign="top">
            <th valign="top" align="left" width="20%">DataType Enum</th>
            <th valign="top" align="left" width="10%">Value</th>
            <th valign="top" align="left" width="23%">Access</th>
            <th valign="top" align="left" width="23%">SQLServer</th>
            <th valign="top" align="left" width="24%">Oracle</th>
        </tr>
        <tr valign="top">
            <td valign="top">adBigInt</td>
            <td valign="top">20</td>
            <td valign="top">&nbsp;</td>
            <td valign="top">BigInt (SQL Server 2000 +)</td>
            <td valign="top">&nbsp;</td>
        </tr>
        <tr valign="top">
            <td valign="top">adBinary</td>
            <td valign="top">128</td>
            <td valign="top">&nbsp;</td>
            <td valign="top">Binary<br />
            TimeStamp</td>
            <td valign="top">Raw *</td>
        </tr>
        <tr>
            <td valign="top">adBoolean</td>
            <td valign="top">11</td>
            <td valign="top">YesNo</td>
            <td valign="top">Bit</td>
            <td valign="top">&nbsp;</td>
        </tr>
        <tr>
            <td valign="top">adChar</td>
            <td valign="top">129</td>
            <td valign="top">&nbsp;</td>
            <td valign="top">Char</td>
            <td valign="top">Char</td>
        </tr>
        <tr>
            <td valign="top">adCurrency</td>
            <td valign="top">6</td>
            <td valign="top">Currency</td>
            <td valign="top">Money<br />
            SmallMoney</td>
            <td valign="top">&nbsp;</td>
        </tr>
        <tr>
            <td valign="top">adDate</td>
            <td valign="top">7</td>
            <td valign="top">Date</td>
            <td valign="top">DateTime</td>
            <td valign="top">&nbsp;</td>
        </tr>
        <tr>
            <td valign="top">adDBTimeStamp</td>
            <td valign="top">135</td>
            <td valign="top">DateTime (Access 97 (ODBC))</td>
            <td valign="top">DateTime<br />
            SmallDateTime</td>
            <td valign="top">Date</td>
        </tr>
        <tr>
            <td valign="top">adDecimal</td>
            <td valign="top">14</td>
            <td valign="top">&nbsp;</td>
            <td valign="top">&nbsp;</td>
            <td valign="top">Decimal *</td>
        </tr>
        <tr>
            <td valign="top">adDouble</td>
            <td valign="top">5</td>
            <td valign="top">Double</td>
            <td valign="top">Float</td>
            <td valign="top">Float</td>
        </tr>
        <tr valign="top">
            <td valign="top">adGUID</td>
            <td valign="top">72</td>
            <td valign="top">ReplicationID (Access 97 (OLEDB)), (Access 2000 (OLEDB))</td>
            <td valign="top">UniqueIdentifier (SQL Server 7.0 +)</td>
            <td valign="top">&nbsp;</td>
        </tr>
        <tr valign="top">
            <td valign="top">adIDispatch</td>
            <td valign="top">9</td>
            <td valign="top">&nbsp;</td>
            <td valign="top">&nbsp;</td>
            <td valign="top">&nbsp;</td>
        </tr>
        <tr valign="top">
            <td valign="top">adInteger</td>
            <td valign="top">3</td>
            <td valign="top">AutoNumber<br />
            Integer<br />
            Long</td>
            <td valign="top">Identity (SQL Server 6.5)<br />
            Int<br />
            &nbsp;</td>
            <td valign="top">Int *</td>
        </tr>
        <tr valign="top">
            <td valign="top">adLongVarBinary</td>
            <td valign="top">205</td>
            <td valign="top">OLEObject</td>
            <td valign="top">Image</td>
            <td valign="top">Long Raw *<br />
            Blob (Oracle 8.1.x)</td>
        </tr>
        <tr valign="top">
            <td valign="top">adLongVarChar</td>
            <td valign="top">201</td>
            <td valign="top">Memo (Access 97)<br />
            Hyperlink (Access 97)</td>
            <td valign="top">Text</td>
            <td valign="top">Long *<br />
            Clob (Oracle 8.1.x)</td>
        </tr>
        <tr valign="top">
            <td valign="top">adLongVarWChar</td>
            <td valign="top">203</td>
            <td valign="top">Memo (Access 2000 (OLEDB))<br />
            Hyperlink (Access 2000 (OLEDB))</td>
            <td valign="top">NText (SQL Server 7.0 +)</td>
            <td valign="top">NClob (Oracle 8.1.x)</td>
        </tr>
        <tr valign="top">
            <td valign="top">adNumeric</td>
            <td valign="top">131</td>
            <td valign="top">Decimal (Access 2000 (OLEDB))</td>
            <td valign="top">Decimal<br />
            Numeric</td>
            <td valign="top">Decimal<br />
            Integer<br />
            Number<br />
            SmallInt</td>
        </tr>
        <tr valign="top">
            <td valign="top">adSingle</td>
            <td valign="top">4</td>
            <td valign="top">Single</td>
            <td valign="top">Real</td>
            <td valign="top">&nbsp;</td>
        </tr>
        <tr valign="top">
            <td valign="top">adSmallInt</td>
            <td valign="top">2</td>
            <td valign="top">Integer</td>
            <td valign="top">SmallInt</td>
            <td valign="top">&nbsp;</td>
        </tr>
        <tr valign="top">
            <td valign="top">adUnsignedTinyInt</td>
            <td valign="top">17</td>
            <td valign="top">Byte</td>
            <td valign="top">TinyInt</td>
            <td valign="top">&nbsp;</td>
        </tr>
        <tr valign="top">
            <td valign="top">adVarBinary</td>
            <td valign="top">204</td>
            <td valign="top">ReplicationID (Access 97)</td>
            <td valign="top">VarBinary</td>
            <td valign="top">&nbsp;</td>
        </tr>
        <tr valign="top">
            <td valign="top">adVarChar</td>
            <td valign="top">200</td>
            <td valign="top">Text (Access 97)</td>
            <td valign="top">VarChar</td>
            <td valign="top">VarChar</td>
        </tr>
        <tr valign="top">
            <td valign="top">adVariant</td>
            <td valign="top">12</td>
            <td valign="top">&nbsp;</td>
            <td valign="top">Sql_Variant (SQL Server 2000 +)</td>
            <td valign="top">VarChar2</td>
        </tr>
        <tr valign="top">
            <td valign="top">adVarWChar</td>
            <td valign="top">202</td>
            <td valign="top">Text (Access 2000 (OLEDB))</td>
            <td valign="top">NVarChar (SQL Server 7.0 +)</td>
            <td valign="top">NVarChar2</td>
        </tr>
        <tr valign="top">
            <td valign="top">adWChar</td>
            <td valign="top">130</td>
            <td valign="top">&nbsp;</td>
            <td valign="top">NChar (SQL Server 7.0 +)</td>
            <td valign="top">&nbsp;</td>
        </tr>
    </tbody>
</table>
<p>* In Oracle 8.0.x - decimal and int are equal to number and number(10).</p>
</div>
<br />
<img src ="http://www.cnblogs.com/datasky/aggbug/952157.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42795/" target="_blank">[新闻]75%下载火狐者并不使用 Mozilla被敲响警钟</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>Oracle中建立自增字段的办法</title><link>http://www.cnblogs.com/datasky/archive/2007/11/07/952154.html</link><dc:creator>datasky</dc:creator><author>datasky</author><pubDate>Wed, 07 Nov 2007 06:38:00 GMT</pubDate><guid>http://www.cnblogs.com/datasky/archive/2007/11/07/952154.html</guid><wfw:comment>http://www.cnblogs.com/datasky/comments/952154.html</wfw:comment><comments>http://www.cnblogs.com/datasky/archive/2007/11/07/952154.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/datasky/comments/commentRss/952154.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/datasky/services/trackbacks/952154.html</trackback:ping><description><![CDATA[<span class="a14c" id="zoom">&nbsp;
<p style="text-indent: 2em">就像大家都有所共识的那样，在Oracle里并没有像其他数据库中的那种自增字段，那么我们怎样才能实现Oracle的自增字段功能呢？这篇文章就来介绍下通过Oracle中的Sequence和Trigger来实现此功能。 <br />
--<strong>1、首先建立一个创建自增字段的存储过程</strong> </p>
</span>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">&nbsp;1</span><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">create</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">or</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">replace</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">procedure</span><span style="color: #000000">&nbsp;pr_CreateIdentityColumn<br />
</span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align="top"  alt="" />(<br />
</span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;tablename&nbsp;nvarchar2,<br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;columnname&nbsp;nvarchar2<br />
</span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align="top"  alt="" />)<br />
</span><span style="color: #008080">&nbsp;6</span><span style="color: #000000"><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">as</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;strsql&nbsp;</span><span style="font-weight: bold; color: #000000">varchar2</span><span style="color: #000000">(</span><span style="font-weight: bold; color: #800000">1000</span><span style="color: #000000">);<br />
</span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">begin</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;9</span><span style="color: #000000"><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;strsql&nbsp;:</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">create&nbsp;sequence&nbsp;seq_</span><span style="color: #ff0000">'</span><span style="color: #808080">||</span><span style="color: #000000">tablename</span><span style="color: #808080">||</span><span style="color: #ff0000">'</span><span style="color: #ff0000"><br />
</span><span style="color: #008080">10</span><span style="color: #ff0000"><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;minvalue&nbsp;1<br />
</span><span style="color: #008080">11</span><span style="color: #ff0000"><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;maxvalue&nbsp;2000000000<br />
</span><span style="color: #008080">12</span><span style="color: #ff0000"><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;start&nbsp;with&nbsp;1000000001<br />
</span><span style="color: #008080">13</span><span style="color: #ff0000"><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;increment&nbsp;by&nbsp;1<br />
</span><span style="color: #008080">14</span><span style="color: #ff0000"><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;nocache<br />
</span><span style="color: #008080">15</span><span style="color: #ff0000"><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;order</span><span style="color: #ff0000">'</span><span style="color: #000000">;<br />
</span><span style="color: #008080">16</span><span style="color: #000000"><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">execute</span><span style="color: #000000">&nbsp;immediate&nbsp;strsql;<br />
</span><span style="color: #008080">17</span><span style="color: #000000"><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">18</span><span style="color: #000000"><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;strsql&nbsp;:</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">create&nbsp;or&nbsp;replace&nbsp;trigger&nbsp;trg_</span><span style="color: #ff0000">'</span><span style="color: #808080">||</span><span style="color: #000000">tablename</span><span style="color: #808080">||</span><span style="color: #ff0000">'</span><span style="color: #ff0000"><br />
</span><span style="color: #008080">19</span><span style="color: #ff0000"><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;before&nbsp;insert&nbsp;on&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #808080">||</span><span style="color: #000000">tablename</span><span style="color: #808080">||</span><span style="color: #ff0000">'</span><span style="color: #ff0000"><br />
</span><span style="color: #008080">20</span><span style="color: #ff0000"><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;for&nbsp;each&nbsp;row<br />
</span><span style="color: #008080">21</span><span style="color: #ff0000"><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;begin<br />
</span><span style="color: #008080">22</span><span style="color: #ff0000"><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;select&nbsp;seq_</span><span style="color: #ff0000">'</span><span style="color: #808080">||</span><span style="color: #000000">tablename</span><span style="color: #808080">||</span><span style="color: #ff0000">'</span><span style="color: #ff0000">.nextval&nbsp;into&nbsp;:new.</span><span style="color: #ff0000">'</span><span style="color: #808080">||</span><span style="color: #000000">columnname</span><span style="color: #808080">||</span><span style="color: #ff0000">'</span><span style="color: #ff0000">&nbsp;from&nbsp;dual;<br />
</span><span style="color: #008080">23</span><span style="color: #ff0000"><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;end;</span><span style="color: #ff0000">'</span><span style="color: #000000">;<br />
</span><span style="color: #008080">24</span><span style="color: #000000"><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">execute</span><span style="color: #000000">&nbsp;immediate&nbsp;strsql;<br />
</span><span style="color: #008080">25</span><span style="color: #000000"><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">end</span><span style="color: #000000">;</span></div>
<br />
<font face="Courier New">
<p><br />
<strong>--2、Oracle中执行动态SQL时要显示授权（即使该用户拥有该相关权限）（注意：数据库用户名区分大小写）&nbsp;<br />
</strong>&nbsp;&nbsp;&nbsp;&nbsp;GRANT CREATE ANY SEQUENCE TO "ZZQ";<br />
&nbsp;&nbsp;&nbsp;&nbsp;GRANT CREATE ANY TRIGGER TO "ZZQ";&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;GRANT CREATE ANY TABLE TO "ZZQ";&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;GRANT CREATE ANY VIEW TO "ZZQ"; </p>
<p><strong>--3、重新Compile存储过程pr_CreateIdentityColumn </strong></p>
<p><strong>--4、搞定，下面我们就可以用这个存储过程建立自增自段了。 </strong></p>
<p><strong>--5、调用存储过程建立自增字段（Note: 第一个参数是表名，第二个参数为自增字段的名字）</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;begin&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pr_createidentitycolumn('tb_admin','admin_id');<br />
&nbsp;&nbsp;&nbsp;&nbsp;end;<br />
<br />
<br />
</font></p>
<img src ="http://www.cnblogs.com/datasky/aggbug/952154.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42795/" target="_blank">[新闻]75%下载火狐者并不使用 Mozilla被敲响警钟</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>[转]使用ADO.NET访问Oracle存储过程</title><link>http://www.cnblogs.com/datasky/archive/2007/11/07/952141.html</link><dc:creator>datasky</dc:creator><author>datasky</author><pubDate>Wed, 07 Nov 2007 06:30:00 GMT</pubDate><guid>http://www.cnblogs.com/datasky/archive/2007/11/07/952141.html</guid><wfw:comment>http://www.cnblogs.com/datasky/comments/952141.html</wfw:comment><comments>http://www.cnblogs.com/datasky/archive/2007/11/07/952141.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/datasky/comments/commentRss/952141.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/datasky/services/trackbacks/952141.html</trackback:ping><description><![CDATA[<p>本文讨论了如何使用 ADO.NET 访问 Oracle 存储过程（称为 SQL 编程块）和函数（返回单个值的编程块）。
<p>您可以使用以下托管数据提供程序连接到 Oracle 数据库：Microsoft .NET Oracle 提供程序、OLE DB .NET 提供程序、ODBC .NET 数据提供程序以及 Oracle 的 ODP.NET 提供程序。本文使用用于 Oracle 的 Microsoft .NET 框架数据提供程序。使用 Oracle ODP.NET 数据提供程序或用于 OLE DB 的 Microsoft .NET 框架数据提供程序时可使用不同的功能。
<p>Oracle .NET 数据提供程序随 .NET 框架 1.1/2.0 一起提供。如果您使用的是 .NET 框架 1.0，您将需要下载 .NET Managed Provider for Oracle。无论是哪个版本，数据提供程序类都位于 System.Data.OracleClient 命名空间中。
<h4>概述</h4>
<p>PL/SQL 是 SQL 的 Oracle 实现。它与 Microsoft?SQL Server? 所使用的 T-SQL 类似，但也有一些不同之处，本文稍后对此进行了详细讨论。与 T-SQL 一样，PL/SQL 扩展了标准 SQL。PL/SQL 用于定义命名编程块，如存储过程、函数和触发器。
<h4>类</h4>
<p>可使用 System.Data.OracleClient 命名空间中类的子集来执行 Oracle 存储过程和函数。下表对这些类进行了说明：
<p>类<br />
说明
<p>OracleCommand
<p>针对 Oracle 数据库执行的存储过程的 SQL 语句。
<p>OracleConnection
<p>打开的数据库连接。
<p>OracleParameter
<p>OracleCommand 的参数，也可能是它到 DataColumn 的映射。
<p>OracleParameterCollection
<p>OracleParameter 对象的集合。
<p>OracleType
<p>Oracle 数据类型和结构的枚举。
<h4>执行存储过程</h4>
<p>执行 Oracle 存储过程与执行 SQL Server 存储过程类似。下面的步骤说明了如何执行 Oracle 存储过程和检索它返回的结果。
<p>1.
<p>在 HR 架构中创建一个名为 COUNT_JOB_HISTORY 的存储过程，以计算 JOB_HISTORY 表中的记录数。
<pre>CREATE OR REPLACE PROCEDURE COUNT_JOB_HISTORY
(
reccount OUT NUMBER
)
IS
BEGIN
SELECT COUNT(*) INTO reccount
FROM JOB_HISTORY;
END COUNT_JOB_HISTORY;
</pre>
<p>HR 架构是默认 Oracle 安装中包含的一个示例。
<p>2.
<p>将 System.Data.OracleClient.dll（用于 Oracle 的 Microsoft .NET 框架数据提供程序）的引用添加到项目中。
<p>3.
<p>使用 using 指令导入 OracleClient 类中的类型。
<pre>using System.Data.OracleClient;
</pre>
<p>4.
<p>创建一个 OracleConnection 对象。
<pre>OracleConnection conn = new OracleConnection("Data Source=oracledb;
User Id=UserID;Password=Password;");
</pre>
<p>用您的值替换 Oracle 数据库的名称、用户名和密码。
<p>5.
<p>创建一个 OracleCommand 对象。将其 Connection 属性设置为第 4 步中创建的连接。将其 CommandText 设置为存储过程的名称，并将其 CommandText 属性设置为 CommandType.StoredProcedure。当您调用第 8 步中介绍的一个 Execute() 方法时，该命令对象将执行指定的存储过程。
<pre>OracleCommand cmd = new OracleCommand();
cmd.Connection = conn;
cmd.CommandText = "COUNT_JOB_HISTORY";
cmd.CommandType = CommandType.StoredProcedure;
</pre>
<p>如果您的存储过程名称含有特殊字符，您就必须使用转义序列。您可以通过重置 CommandText 属性来重用现有的 OracleCommand 对象。
<p>6.
<p>创建输入、输出和返回值的 OracleParameter 对象，并将其添加到 OracleCommand 对象的参数集合中。
<pre>cmd.Parameters.Add("reccount", OracleType.Number).Direction =
ParameterDirection.Output;
</pre>
<p>该行代码是以下两行代码的简写形式：
<pre>cmd.Parameters.Add("reccount", OracleType.Number);
cmd.Parameters["reccount"].Direction = ParameterDirection.Output;
</pre>
<p>7.
<p>如果您要检索结果集，请创建 DataSet、DataTable 或 DataReader。在本示例中，我们只是获取第 6 步中创建的输出参数中的计数。
<p>8.
<p>使用 OracleCommand 对象的一个 Execute 方法打开连接并执行存储过程，如下所示：
<p>方法<br />
说明
<p>ExecuteReader
<p>通过执行能够返回结果集的存储过程生成 OracleDataReader。
<p>ExecuteNonQuery
<p>执行不返回结果集的查询或过程，返回受影响的行数。
<p>ExecuteOracleNonQuery
<p>执行查询，返回受影响的行数。
<p>该方法还使用 OracleString 参数来返回 UPDATE、INSERT 或 DELETE 查询所修改的最后一行的行 ID。
<p>ExecuteScalar
<p>执行一个查询或过程，并且返回查询或过程的返回值，或者将结果集第一行第一列的值作为 .NET 框架数据类型返回。
<p>ExecuteOracleScalar
<p>执行一个查询或过程，并且返回查询或过程的返回值，或者将结果集第一行第一列的值作为 OracleType 数据类型返回。
<p>使用完连接后，不要忘记将其关闭。
<pre>conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
</pre>
<p>如果您要使用 DataAdapter 来填充 DataTable 或 DataSet，可以依靠 DataAdapter 来打开和关闭连接。
<p>9.
<p>处理结果。在我们的示例中，可在显示到控制台的输出参数中得到记录数：
<pre>Console.WriteLine(cmd.Parameters["reccount"].Value);
</pre>
<p>下面是在本示例中开发的用于执行存储过程和检索结果的代码：
<pre>OracleConnection conn = new OracleConnection("Data Source=oracledb;
User Id=UserID;Password=Password;");
OracleCommand cmd = new OracleCommand();
cmd.Connection = conn;
cmd.CommandText = "COUNT_JOB_HISTORY";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("reccount", OracleType.Number).Direction =
ParameterDirection.Output;
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
Console.WriteLine(cmd.Parameters["reccount"].Value);
</pre>
<h4>不返回数据的存储过程</h4>
<p><u>OracleCommand 类的 ExecuteOracleNonQuery() 方法用于执行不返回任何行的 SQL 语句或存储过程。该方法返回一个 int 值，表示受 UPDATE、INSERT 和 DELETE 命令影响的行数；如果没有任何行受到影响，则返回 -1。如果您所执行的 INSERT、DELETE 或 UPDATE 语句恰好影响一行，则该方法具有单个参数 OracleString out rowid，该参数唯一标识 Oracle 数据库中受影响的行。可以使用该值来优化后续相关查询。 </u>
<p><u>还可以使用 OracleCommand 类的 ExecuteNonQuery() 方法来执行不返回数据的存储过程，但您将无法获得上面介绍的唯一行标识符。</u>
<p><u>尽管上述命令都不会返回任何数据，但映射到参数的输出参数和返回值仍然使用数据进行填充。这使您可以使用上述任一命令从存储过程返回一个或多个标量值。</u>
<p>以下 Oracle 存储过程删除了由单个输入参数指定的员工的所有工作经历，并且不返回任何数据。
<pre>CREATE OR REPLACE PROCEDURE DELETE_JOB_HISTORY
(
p_employee_id NUMBER
)
IS
BEGIN
DELETE FROM job_history
WHERE employee_id = p_employee_id;
END DELETE_JOB_HISTORY;
</pre>
<p>以下代码运行了该存储过程。
<pre>// create the connection
OracleConnection conn = new OracleConnection("Data Source=oracledb;
User Id=UserID;Password=Password;");
// create the command for the stored procedure
OracleCommand cmd = new OracleCommand();
cmd.Connection = conn;
cmd.CommandText = "COUNT_JOB_HISTORY";
cmd.CommandType = CommandType.StoredProcedure;
// add the parameter specifying the employee for whom to delete records
cmd.Parameters.Add("p_employee_id", OracleType.Number).Value = 102;
OracleString rowId;
// execute the stored procedure
conn.Open();
int rowsAffected = cmd.ExecuteNonQuery();
conn.Close();
Console.WriteLine("Rows affected: " + rowsAffected);
</pre>
<p>如果您尚未修改默认的 HR 安装，则 JOB_HISTORY 表中员工 102 的记录被删除，并且向控制台输出以下内容：
<pre>Rows affected: 1
</pre>
<p>访问返回值
<p>RETURN 语句立即将控制从存储过程返回到调用程序。Oracle 存储过程中的 RETURN 语句无法像在 T-SQL 中那样返回值。
<p><u>Oracle 函数是计算并返回单个值的子程序。它们的结构类似于存储过程，不同之处在于它们总是具有必须返回值的 RETURN 子句。</u>
<p>下面是一个返回指定员工的电子邮件的函数：
<pre>CREATE OR REPLACE FUNCTION GET_EMPLOYEE_EMAIL (
p_employee_id NUMBER
)
RETURN VARCHAR2
IS p_email VARCHAR2(25);
BEGIN
SELECT EMAIL INTO p_email FROM EMPLOYEES
WHERE EMPLOYEE_ID = p_employee_id;
RETURN p_email;
END GET_EMPLOYEE_EMAIL;
</pre>
<p><u>执行函数的方式与执行存储过程的方式相同。可使用 ParameterDirection.ReturnValue 参数获得由函数返回的结果。</u>以下代码显示了使用方法：
<pre>// create the connection
OracleConnection conn = new OracleConnection("Data Source=oracledb;
User Id=UserID;Password=Password;");
// create the command for the function
OracleCommand cmd = new OracleCommand();
cmd.Connection = conn;
cmd.CommandText = "GET_EMPLOYEE_EMAIL";
cmd.CommandType = CommandType.StoredProcedure;
// add the parameters, including the return parameter to retrieve
// the return value
cmd.Parameters.Add("p_employee_id", OracleType.Number).Value = 101;
cmd.Parameters.Add("p_email", OracleType.VarChar, 25).Direction =
ParameterDirection.ReturnValue;
// execute the function
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
// output the result
Console.WriteLine("Email address is: " + cmd.Parameters["p_email"].Value);
</pre>
<p>控制台输出显示了员工 101 的电子邮件地址。
<pre>Email address is: NKOCHHAR</pre>
<h4>结果集与 REF CURSOR</h4>
<p><u>可使用 REF CURSOR 数据类型来处理 Oracle 结果集。REF CURSOR 是一个指向 PL/SQL 查询所返回的结果集的指针。与普通的游标不同，REF CURSOR 是一个变量，它是对游标的引用，可以在执行时将其设置为指向不同的结果集。使用 REF CURSOR 输出参数可以将 Oracle 结构化程序的结果集传递回调用应用程序。通过在调用应用程序中定义 OracleType.Cursor 数据类型的输出参数，可以访问 REF CURSOR 所指向的结果集。</u>在使用 REF CURSOR 的过程中，OracleConnection 必须保持打开状态。
<h4>包</h4>
<p>PL/SQL 和 T-SQL 中的存储过程之间的一个重大差异是 PL/SQL 所使用的 Oracle 包 结构。在 T-SQL 中没有等效元素。包是在逻辑上相关的编程块（如存储过程和函数）的容器。它包含两个部分：
<p>&#8226;
<p>规范：定义包的名称，并为包中的每个存储过程或函数提供方法签名（原型）。规范头还定义所有全局声明。规范的样式类似于 C 或 C++ 头文件。
<p>&#8226;
<p>正文：包含包头中定义的存储过程和函数的代码。
<p>每个存储过程或函数的参数都出现在括号内，并且用逗号分隔。每个参数还根据需要用以下三个标识符中的一个进行标记：
<p>&#8226;
<p>IN：该值从调用应用程序传递到 PL/SQL 块。如果未指定标识符，则 IN 为默认传递方向。
<p>&#8226;
<p>OUT：该值由存储过程生成，并传递回调用应用程序。
<p>&#8226;
<p>INOUT：该值被传递到 PL/SQL 块，可能在该块内部进行修改，然后返回到调用应用程序。
<p>每个参数也都被标记以指示数据类型。
<p>以下包规范定义了四个过程，它们在 HR 架构的 LOCATIONS 表中创建、检索、更新和删除数据。
<pre>CREATE OR REPLACE PACKAGE CRUD_LOCATIONS AS
TYPE T_CURSOR IS REF CURSOR;
PROCEDURE GetLocations (cur_Locations OUT T_CURSOR);
PROCEDURE UpdateLocations (p_location_id IN NUMBER,
p_street_address IN VARCHAR2,
p_postal_code IN VARCHAR2,
p_city IN VARCHAR2,
p_state_province IN VARCHAR2,
p_country_id IN CHAR);
PROCEDURE DeleteLocations (p_location_id IN NUMBER);
PROCEDURE InsertLocations (p_location_id OUT NUMBER,
p_street_address IN VARCHAR2,
p_postal_code IN VARCHAR2,
p_city IN VARCHAR2,
p_state_province IN VARCHAR2,
p_country_id IN CHAR);
END CRUD_LOCATIONS;
</pre>
<p>以下代码摘自上述包规范的包正文，说明了 GetLocations 包中的第一个过程的实现细节：
<pre>CREATE OR REPLACE PACKAGE BODY CRUD_LOCATIONS AS
PROCEDURE GetLocations (cur_Locations OUT T_CURSOR)
IS
BEGIN
OPEN cur_Locations FOR
SELECT * FROM LOCATIONS;
END GetLocations;
-- Implementation of other procedures ommitted.
END CRUD_LOCATIONS;</pre>
<h4>使用 DataReader</h4>
<p>可以通过调用 OracleCommand 对象的 ExecuteReader() 方法来创建 OracleDataReader。本节说明如何使用 DataReader 来访问由存储过程 SELECT_JOB_HISTORY 返回的结果集。以下为包规范：
<pre>CREATE OR REPLACE PACKAGE SELECT_JOB_HISTORY AS
TYPE T_CURSOR IS REF CURSOR;
PROCEDURE GetJobHistoryByEmployeeId
(
p_employee_id IN NUMBER,
cur_JobHistory OUT T_CURSOR
);
END SELECT_JOB_HISTORY;
</pre>
<p>包正文定义了一个过程，该过程检索指定员工的工作经历的