﻿<?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>IT博客-沙龙之窝-随笔分类-工具类</title><link>http://www.cnitblog.com/salemsu/category/7419.html</link><description>我的心路历程及工作经验分享,希望诸位能有所感悟和共鸣，能在尘世中找到自己的路。毕竟，路终究还是要自己走。</description><language>zh-cn</language><lastBuildDate>Thu, 29 Sep 2011 16:43:47 GMT</lastBuildDate><pubDate>Thu, 29 Sep 2011 16:43:47 GMT</pubDate><ttl>60</ttl><item><title>“无法从web服务器获取项目文件”解决方案 </title><link>http://www.cnitblog.com/salemsu/archive/2008/11/03/51006.html</link><dc:creator>沙龙</dc:creator><author>沙龙</author><pubDate>Mon, 03 Nov 2008 07:20:00 GMT</pubDate><guid>http://www.cnitblog.com/salemsu/archive/2008/11/03/51006.html</guid><wfw:comment>http://www.cnitblog.com/salemsu/comments/51006.html</wfw:comment><comments>http://www.cnitblog.com/salemsu/archive/2008/11/03/51006.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/salemsu/comments/commentRss/51006.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/salemsu/services/trackbacks/51006.html</trackback:ping><description><![CDATA[<div class=postBody>问题：打开VS.NET项目时遇到&#8220;无法从web服务器获取项目文件&#8221;<br>解决方案：<br>1.确保你的IIS里没有已经存在一个同名的项目；<br>2.找到&#8220;C:\Documents and Settings\你的用户名\VSWebCache\计算机名\&#8221;中, 删除与该项目同名的文件夹。这个文件是我们错误建立WEB目录时产生印象文件，看看是否存在，若存在，则删除；<br>3.去看看你项目里面文件名为 ***.csproj.webinfo的内容里面<br>
<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"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">VisualStudioUNCWeb</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">Web&nbsp;URLPath&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">http://localhost/RPM03x0/WorkFlow/WorkFlow.csproj</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">/&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">VisualStudioUNCWeb</span><span style="COLOR: #000000">&gt;</span></div>
<br>如果项目虚拟目录名称跟这里设置不一样，一般都会出现你所描述的错误。。改成一样的就是了<br>4.如果你创建一个解决方案，解决方案中创建多个项目，确保***.sln文件中配置正确：<br>
<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"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">Project(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">项目名1</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">http://localhost/解决方案/项目名1/项目名1.csproj</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">{2C8FD11D-8EC7-422A-87F0-E98FDE7E070E}</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;ProjectSection(ProjectDependencies)&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;postProject<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;EndProjectSection<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top>EndProject<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top>Project(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">项目名2</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">http://localhost/解决方案/项目名2/项目名2.csproj</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">{F4E0337F-534D-4E73-A9D0-05D3C957044A}</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;ProjectSection(ProjectDependencies)&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;postProject<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;EndProjectSection<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top>EndProject<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top>Project(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">项目名3</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">http://localhost/解决方案/项目名3/项目名3.csproj</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">{34D91D78-461E-404D-8116-37D0BB9039C9}</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;ProjectSection(ProjectDependencies)&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;postProject<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;EndProjectSection<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top>EndProject</span></div>
5.如果以上都不行，选择C:\inetpub\wwwroot 看<br>6.再不行，重装系统吧，呵呵 </div>
<img src ="http://www.cnitblog.com/salemsu/aggbug/51006.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/salemsu/" target="_blank">沙龙</a> 2008-11-03 15:20 <a href="http://www.cnitblog.com/salemsu/archive/2008/11/03/51006.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个朋友帮忙写的基于Oracle 实现进销存的触发器</title><link>http://www.cnitblog.com/salemsu/archive/2008/07/18/46878.html</link><dc:creator>沙龙</dc:creator><author>沙龙</author><pubDate>Fri, 18 Jul 2008 05:40:00 GMT</pubDate><guid>http://www.cnitblog.com/salemsu/archive/2008/07/18/46878.html</guid><wfw:comment>http://www.cnitblog.com/salemsu/comments/46878.html</wfw:comment><comments>http://www.cnitblog.com/salemsu/archive/2008/07/18/46878.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/salemsu/comments/commentRss/46878.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/salemsu/services/trackbacks/46878.html</trackback:ping><description><![CDATA[<p>CREATE OR REPLACE TRIGGER TRG_cux_wms_transaction_line<br>&nbsp; before insert or update or delete on cux_wms_transaction_line<br>&nbsp; REFERENCING NEW AS NEW OLD AS OLD<br>&nbsp; for each row<br>declare<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ai_in_count number;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ai_out_count number;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ai_abs number;<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; --源仓区游标&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; Cursor temp_in_cursor is<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; select count(*)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; from cux_wms_stock<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; where :new.organization_id = cux_wms_stock.organization_id and<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :new.org_id = cux_wms_stock.org_id and<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :new.INVENTORY_CODE = cux_wms_stock.INVENTORY_CODE and<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :new.splint_barcode = cux_wms_stock.splint_barcode and<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :new.item_barcode = cux_wms_stock.item_barcode and<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :new.batchno= cux_wms_stock.batch_number and<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :new.source_loc_code = cux_wms_stock.location_code;<br>&nbsp;&nbsp;&nbsp; --目标仓区游标&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; Cursor temp_out_cursor is<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; select count(*)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; from cux_wms_stock<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; where :new.organization_id = cux_wms_stock.organization_id and<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :new.org_id = cux_wms_stock.org_id and<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :new.INVENTORY_CODE = cux_wms_stock.INVENTORY_CODE and<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :new.splint_barcode = cux_wms_stock.splint_barcode and<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :new.item_barcode = cux_wms_stock.item_barcode and<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :new.batchno= cux_wms_stock.batch_number and<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :new.intent_loc_code = cux_wms_stock.location_code;<br>begin<br>&nbsp; <br>&nbsp; --设定计算方向<br>&nbsp; --case :new.operation_Mark;<br>&nbsp;&nbsp; --&nbsp;&nbsp;&nbsp; when 'I' then ai_abs := 1;<br>&nbsp;&nbsp; --&nbsp;&nbsp;&nbsp; when 'O' then ai_abs := -1;<br>&nbsp;&nbsp; --&nbsp;&nbsp;&nbsp; when 'M' then ai_abs := 1;<br>&nbsp;&nbsp; --&nbsp;&nbsp;&nbsp; else ai_abs := 0;<br>&nbsp; --end case;<br>&nbsp; ai_abs := 1;<br>&nbsp; if :new.operation_Mark = 'I' then--设定计算方向<br>&nbsp;&nbsp;&nbsp;&nbsp; ai_abs := 1;<br>&nbsp; end if;<br>&nbsp; if :new.operation_Mark = 'O' then--设定计算方向<br>&nbsp;&nbsp;&nbsp;&nbsp; ai_abs := -1;<br>&nbsp; end if; <br>&nbsp; if :new.operation_Mark = 'M' then--设定计算方向<br>&nbsp;&nbsp;&nbsp;&nbsp; ai_abs := -1;<br>&nbsp; end if;<br>&nbsp; if :new.operation_Mark = 'C' then--设定计算方向<br>&nbsp;&nbsp;&nbsp;&nbsp; ai_abs := 0;<br>&nbsp; end if;<br>&nbsp; --打开源仓区的游标<br>&nbsp; open temp_in_cursor;<br>&nbsp; fetch temp_in_cursor into ai_in_count;<br>&nbsp; <br>&nbsp; if ai_in_count &gt; 0 then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; update cux_wms_stock<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set cux_wms_stock.quantity = cux_wms_stock.quantity + :new.CASE_NUMBER * ai_abs,LAST_UPDATE_DATE=(select sysdate from dual),LAST_UPDATED_BY=:new.LAST_UPDATED_BY<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; where :new.organization_id = cux_wms_stock.organization_id and<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :new.org_id = cux_wms_stock.org_id and<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :new.INVENTORY_CODE = cux_wms_stock.INVENTORY_CODE and<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :new.splint_barcode = cux_wms_stock.splint_barcode and<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :new.item_barcode = cux_wms_stock.item_barcode and<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :new.batchno = cux_wms_stock.batch_number and<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :new.source_loc_code= cux_wms_stock.location_code;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; if :new.operation_Mark = 'M' then--转移模式<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --打开目标仓区的游标<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; open temp_out_cursor;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fetch temp_out_cursor into ai_out_count;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ai_out_count &gt; 0 then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; update cux_wms_stock<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set cux_wms_stock.quantity = cux_wms_stock.quantity + :new.CASE_NUMBER * ai_abs,LAST_UPDATE_DATE=(select sysdate from dual),LAST_UPDATED_BY=:new.LAST_UPDATED_BY<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; where :new.organization_id = cux_wms_stock.organization_id and<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :new.org_id = cux_wms_stock.org_id and<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :new.INVENTORY_CODE=cux_wms_stock.INVENTORY_CODE and<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :new.splint_barcode = cux_wms_stock.splint_barcode and<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :new.item_barcode = cux_wms_stock.item_barcode and<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :new.batchno = cux_wms_stock.batch_number and<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :new.intent_loc_code= cux_wms_stock.location_code;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; Insert into CUX_WMS_STOCK(STOCK_ID,ITEM_BARCODE,SPLINT_BARCODE,ORGANIZATION_ID,ORG_ID,INVENTORY_CODE,<br>LOCATION_CODE,BATCH_NUMBER,QUANTITY,CREATION_DATE,CREATED_BY,LAST_UPDATE_DATE,<br>LAST_UPDATED_BY,INVENTORY_ITEM_ID) values(CUX_WMS_STOCK_ID_S.nextval,:new.item_barcode,:new.splint_barcode,:new.organization_id,:new.org_id,<br>:new.INVENTORY_CODE,:new.intent_loc_code,:new.batchno,:new.CASE_NUMBER * (-ai_abs),:new.CREATION_DATE,:new.CREATED_BY,:new.LAST_UPDATE_DATE,:new.LAST_UPDATED_BY,0);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end if;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; close temp_out_cursor;<br>&nbsp;&nbsp;&nbsp;&nbsp; end if;<br>&nbsp; else<br>&nbsp;&nbsp;&nbsp; if :old.org_id is null then --增加模式时<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Insert into CUX_WMS_STOCK(STOCK_ID,ITEM_BARCODE,SPLINT_BARCODE,ORGANIZATION_ID,ORG_ID,INVENTORY_CODE,<br>LOCATION_CODE,BATCH_NUMBER,QUANTITY,CREATION_DATE,CREATED_BY,LAST_UPDATE_DATE,<br>LAST_UPDATED_BY,INVENTORY_ITEM_ID) values(CUX_WMS_STOCK_ID_S.nextval,:new.item_barcode,:new.splint_barcode,:new.organization_id,:new.org_id,<br>:new.INVENTORY_CODE,:new.intent_loc_code,:new.batchno,:new.CASE_NUMBER * ai_abs,:new.CREATION_DATE,:new.CREATED_BY,:new.LAST_UPDATE_DATE,:new.LAST_UPDATED_BY,0);<br>&nbsp;&nbsp;&nbsp; end if;<br>&nbsp; end if;<br>&nbsp; <br>&nbsp;if :old.org_id is not null then --修改或者删除模式，需要回滚原记录的数据</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; update cux_wms_stock<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set cux_wms_stock.quantity = cux_wms_stock.quantity + :old.CASE_NUMBER * ai_abs,LAST_UPDATE_DATE=(select sysdate from dual),LAST_UPDATED_BY=:old.LAST_UPDATED_BY<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; where :old.organization_id = cux_wms_stock.organization_id and<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :old.org_id = cux_wms_stock.org_id and<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :old.INVENTORY_CODE=cux_wms_stock.INVENTORY_CODE and<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :old.splint_barcode = cux_wms_stock.splint_barcode and<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :old.item_barcode = cux_wms_stock.item_barcode and<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :old.batchno = cux_wms_stock.batch_number and<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :old.source_loc_code= cux_wms_stock.location_code;<br>&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; if :old.operation_Mark = 'M' then--转移模式</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; update cux_wms_stock<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set cux_wms_stock.quantity = cux_wms_stock.quantity + :old.CASE_NUMBER * (-ai_abs),LAST_UPDATE_DATE=(select sysdate from dual),LAST_UPDATED_BY=:old.LAST_UPDATED_BY<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; where :old.organization_id = cux_wms_stock.organization_id and<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :old.org_id = cux_wms_stock.org_id and<br>&nbsp;&nbsp;&nbsp;&nbsp; :old.INVENTORY_CODE=cux_wms_stock.INVENTORY_CODE and<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :old.splint_barcode = cux_wms_stock.splint_barcode and<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :old.item_barcode = cux_wms_stock.item_barcode and<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :old.batchno = cux_wms_stock.batch_number and<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :old.intent_loc_code= cux_wms_stock.location_code;</p>
<p>&nbsp;&nbsp;&nbsp; end if;<br>&nbsp;end if; </p>
<p>&nbsp;close temp_in_cursor;<br>&nbsp;delete from cux_wms_stock where quantity=0;<br>end TRG_CUX;<br>/<br></p>
<img src ="http://www.cnitblog.com/salemsu/aggbug/46878.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/salemsu/" target="_blank">沙龙</a> 2008-07-18 13:40 <a href="http://www.cnitblog.com/salemsu/archive/2008/07/18/46878.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>.NET调用oracle的存储过程返回记录集 </title><link>http://www.cnitblog.com/salemsu/archive/2008/07/18/46877.html</link><dc:creator>沙龙</dc:creator><author>沙龙</author><pubDate>Fri, 18 Jul 2008 05:36:00 GMT</pubDate><guid>http://www.cnitblog.com/salemsu/archive/2008/07/18/46877.html</guid><wfw:comment>http://www.cnitblog.com/salemsu/comments/46877.html</wfw:comment><comments>http://www.cnitblog.com/salemsu/archive/2008/07/18/46877.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/salemsu/comments/commentRss/46877.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/salemsu/services/trackbacks/46877.html</trackback:ping><description><![CDATA[<p>长期以来，我一直用的是 MS SQL Server / Access 数据库，通过 .NET 访问 MS 自家的东西几乎没碰到过什么麻烦。最近项目中要用 Oracle 作为数据库，学习研究了一些 .NET 访问 Oracle 的东西，发现问题倒真的不少。<br><br></p>
<p>1。System.Data.OracleClient 和 System.Data.OleDb 命名空间</p>
<p>虽然通过这两个命名空间的类都可以访问 Oracle 数据库，但和 SQL Server 类似的（System.Data.SqlClient 命名空间的类效率要比 System.Data.OleDb 命名空间中的类高一些），System.Data.OracleClient 命名空间中的类要比 System.Data.OleDb 命名空间的类效率高一些（这一点我没有亲自验证，但大多数地方都会这么说，而且既然专门为 Oracle 作的东西理论上也应该专门作过针对性的优化）。</p>
<p>当然还有另一点就是从针对性上说，System.Data.OracleClient 要更好一些：</p>
<p>比如数据类型，System.Data.OleDb.OleDbType 枚举中所列的就没有 System.Data.OracleClient.OracleType 枚举中的那些有针对性；另外，Oracle 的 Number 类型如果数字巨大，超出&nbsp;.NET 数据类型范围的情况中，就必须使用 System.Data.OracleClient 中的专门类 --&nbsp;OracleNumber 类型。</p>
<p>好了，不再赘述这两个的比较，下面主要讨论 System.Data.OracleClient 命名空间中的类型，即 ADO.NET for Oracle Data Provider (数据提供程序)。</p>
<br>注:如果要使用Oracle的cursor(游标)返回多记录集,请使用System.Data.OracleClient,因为System.Data.OleDb 没有这种数据类型.(当时这个问题折腾我几天了)<br><br>
<p>2。数据库连接：</p>
<p>无论是 System.Data.OleDb 还是 System.Data.OracleClient 访问 Oracle 都需要在 .NET 运行的机器（ASP.NET 中就是 Web 服务器）安装 Oracle 客户端组件。（这一点是和 MS 的两种数据库不同的，MS 的东西安装 MDAC: Microsoft Data Access Component 2.6 以上版本后，就无须再安装 SQL Server 客户端或者 Office 软件，就能访问。）</p>
<p>System Requirements：</p>
<p>(1)如用 System.Data.OracleClient 访问 Oracle，客户端组件版本应在 Oracle 8i Client Release 3 (8.1.7)以上版本。MS 只确保访问 Oracle 8.1.6、Oracle 8.1.7、Oracle 9i 服务器时的情况。MDAC 2.6 以上。</p>
<p>(2)如用 System.Data.OleDb 访问 Oracle，客户端组件版本 7.3.3.4.0 以上或 8.1.7.4.1 以上。MDAC 2.6 以上。</p>
<p>如服务器为 Oracle8i 以上，客户端组件版本应为 8.0.4.1.1c。</p>
<p>在 .NET 运行的机器中，安装 Oracle&nbsp;客户端，然后打开 Net Manager (Oracle 9i) / Easy Config (Oracle 8i) 按你以前的经验设置本地服务的映射（这里的服务名将用于数据库连接串）。</p>
<p>System.Data.OracleClient 中访问 Oracle 数据库的连接串是：</p>
<p>User ID=用户名; Password=密码; Data Source=服务名</p>
<p>(上述为一般的连接串，详细的连接串项目可以在 System.Data.OracleClient.OracleConnection.ConnectionString 属性的文档中找到。)</p>
<p>System.Data.OleDb 中的访问 Oracle 数据库的连接串是：</p>
<p>Provider=MSDAORA.1; User ID=用户名; Password=密码; Data Source=服务名<br><br><br></p>
<p>3。Oracle 中的数据类型：</p>
<p>Oracle 的数据类型和 SQL Server 相比，要&#8220;奇怪&#8221;一些：SQL Server 的大多数据类型很容易找到 .NET 中比较接近的类型，Oracle 中的类型就离 .NET 类型远了许多，毕竟 Oracle 是和 Java 亲近的数据库。</p>
<ul>
    <li>number: 数字类型，一般是 Number(M,N)，M是有效数字，N是小数点后的位数（默认0），这个是按十进制说的。
    <li>nvarchar2: 可变长字符型（Unicode），这个比较像 SQL Server 的 nvarchar（但不知 Oracle 为什么加了个&#8220;2&#8221;）。（去掉&#8220;n&#8221;为非 Unicode 的，下同。）
    <li>nchar: 定长字符型(Unicode)。
    <li>nclob: &#8220;写作文&#8221;的字段，存储大量字符（Unicode）时用。
    <li>date: 日期类型，比较接近 SQL Server 的 datetime。</li>
</ul>
<p>Oracle 中字段不能是 bit 或者 bool 之类的类型，一般是 number(1) 代替的。</p>
<p>和 SQL Server 一样在 SQL 命令中，字符类型需要用单引号（'）隔开，两个单引号（''）是单引号的字符转义（比如： I'm fat. 写入一个 SQL 命令是： UPDATE ... SET ...='I''m fat.' ...）。</p>
<p>比较特殊的是日期类型：比如要写入 2004-7-20 15:20:07 这个时刻需要如下写：</p>
<p>UPDATE ... SET ... = TIMESTAMP '2004-7-20 15:20:07' ...</p>
<p>注意这里使用了 TIMESTAMP 关键字，并使用单引号隔开；另外请注意日期格式，上面的格式是可识别的，Oracle 识别的格式没有 SQL Server 那般多。这是和 SQL Server 不同的地方。</p>
<p>顺便提一句：Access 中的日期类型是用井号(#)隔开的，UPDATE ... SET ... = #2004-7-20 15:20:07# ...<br><br><br></p>
<p>4。访问 Oracle 过程/函数（1）</p>
<p>SQL Server 作程序时经常使用存储过程，Oracle 里也可以使用过程，还可以使用函数。Oracle 的过程似乎是不能有返回值的，有返回值的就是函数了（这点有些像 BASIC，函数/过程区分的很细致。SQL Server 存储过程是可以有返回值的）。</p>
<p>.NET 访问 Oracle 过程/函数的方法很类似于 SQL Server，例如：</p>
<p>OracleParameter[] parameters = {<br>&nbsp;&nbsp;&nbsp; new OracleParameter("ReturnValue", OracleType.Int32, 0, ParameterDirection.ReturnValue,&nbsp;true, 0, 0, "",<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DataRowVersion.Default, Convert.DBNull )<br>&nbsp;&nbsp;&nbsp; new OracleParameter("参数1",&nbsp;OracleType.NVarChar, 10),<br>&nbsp;&nbsp;&nbsp; new OracleParameter("参数2",&nbsp;&nbsp;OracleType.DateTime),<br>&nbsp;&nbsp;&nbsp; new OracleParameter("参数3",&nbsp;&nbsp;OracleType.Number, 1)<br>&nbsp;};<br><br>parameters[1].Value = "test";<br>parameters[2].Value = DateTime.Now;<br>parameters[3].Value = 1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 也可以是 new OracleNumber(1);</p>
<p>OracleConnection connection = new OracleConnection( ConnectionString );<br>OracleCommand command = new OracleCommand("函数/程名", connection);<br>command.CommandType = CommandType.StoredProcedure;<br><br>foreach(OracleParameter parameter in parameters)<br>&nbsp;&nbsp;&nbsp;&nbsp; command.Parameters.Add( parameter );<br><br>connection.Open();<br>command.ExecuteNonQuery();<br>int returnValue = parameters[0].Value; //接收函数返回值<br>connection.Close();</p>
<p>Parameter 的 DbType 设定请参见 System.Data.OracleClient.OracleType 枚举的文档，比如：Oracle 数据库中 Number 类型的参数的值可以用 .NET decimal 或 System.Data.OracleClient.OracleNumber 类型指定； Integer 类型的参数的值可以用 .NET int 或 OracleNumber 类型指定。等等。</p>
<p>上面例子中已经看到函数返回值是用名为&#8220;ReturnValue&#8221;的参数指定的，该参数为 ParameterDirection.ReturnValue 的参数。</p>
<p>5。访问 Oracle 过程/函数 (2)</p>
<p>不返回记录集（没有 SELECT 输出）的过程/函数，调用起来和 SQL Server 较为类似。但如果想通过过程/函数返回记录集，在 Oracle 中就比较麻烦一些了。</p>
<p>在 SQL Server 中，如下的存储过程：</p>
<p>CREATE PROCEDURE GetCategoryBooks<br>(<br>&nbsp;&nbsp;&nbsp; @CategoryID int<br>)<br>AS<br>SELECT * FROM Books<br>WHERE CategoryID = @CategoryID<br>GO</p>
<p>在 Oracle 中，请按以下步骤操作：</p>
<p>(1)创建一个包，含有一个游标类型：（一个数据库中只需作一次）</p>
<p>CREATE OR REPLACE PACKAGE Test<br>&nbsp; AS<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TYPE Test_CURSOR IS REF CURSOR;<br>END Test;</p>
<p>(2)过程：</p>
<p>CREATE OR REPLACE PROCEDURE GetCategoryBooks<br>(<br>&nbsp;&nbsp;&nbsp;&nbsp; p_CURSOR&nbsp;out Test.Test_CURSOR,&nbsp;&nbsp;&nbsp; --&nbsp;这里是上面包中的类型，输出参数<br>&nbsp;&nbsp;&nbsp;&nbsp; p_CatogoryID INTEGER<br>)<br>AS<br>BEGIN<br>&nbsp;&nbsp;&nbsp;&nbsp; OPEN p_CURSOR FOR<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SELECT * FROM Books<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WHERE CategoryID=p_CatogoryID;<br>END GetCategoryBooks;</p>
<p>(3).NET 程序中：</p>
<p>OracleParameters parameters = {<br>&nbsp;&nbsp;&nbsp;&nbsp; new OracleParameter("p_CURSOR", OracleType.CURSOR, 2000, ParameterDirection.Output, true, 0, 0, "",<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DataRowVersion.Default, Convert.DBNull),<br>&nbsp;&nbsp;&nbsp;&nbsp; new OracleParameter("p_CatogoryID", OracleType.Int32)<br>};<br><br>parameters[1].Value = 22;<br><br>OracleConnection connection = new OracleConnection( ConnectionString );<br>OracleCommand command = new OracleCommand("GetCategoryBooks", connection);<br>command.CommandType = CommandType.StoredProcedure;<br><br>foreach(OracleParameter parameter in parameters)<br>&nbsp;&nbsp;&nbsp;&nbsp; command.Parameters.Add( parameter );<br><br>connection.Open();<br>OracleDataReader dr = command.ExecuteReader();<br><br>while(dr.Read())<br>{<br>&nbsp;&nbsp;&nbsp; // 你的具体操作。这个就不需要我教吧？<br>}<br>connection.Close();</p>
<p>另外有一点需要指出的是，如果使用 DataReader 取得了一个记录集，那么在 DataReader 关闭之前，程序无法访问输出参数和返回值的数据。</p>
<p>&nbsp;</p>
<p>好了，先这些，总之 .NET 访问 Oracle 还是有很多地方和 SQL Server 不同的，慢慢学习了。</p>
<img src ="http://www.cnitblog.com/salemsu/aggbug/46877.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/salemsu/" target="_blank">沙龙</a> 2008-07-18 13:36 <a href="http://www.cnitblog.com/salemsu/archive/2008/07/18/46877.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>