Re: [問題]Asp.net讀Oracle的問題
※ 引述《diamondking (迷惘)》之銘言:
: ※ 引述《weinine32 (孤僻寂寞)》之銘言:
: : ********
: : 最近在寫一個支程式
: : 當使用者輸入 起迄點的座標後
: : 就會依照使用者輸入的起迄點座標
: : 把起點50公尺內有什麼公車站牌,Insert到 START 這個臨時資料表
: : 把迄點50公尺內有什麼公車站牌,Insert到 END 這個臨時資料表
: : 然後再做Select 把臨時資料表內的資料撈出來
: : Begin
: : Insert Into START select 站牌名稱 FROM 站牌資料表;
: : Insert Into END select 站牌名稱 FROM 站牌資料表;
: : End;
: : Select * From Start, END
: : 但是我發現 BEGIN 和 SELECT 無法同時執行,
: : 也就是說要先執行 Begin end; 再執行 Select 才行
: : 當我把它寫入 ASP.NET 用DataReader 執行這二段要分開寫,寫在一起會出錯
: : **********以下程式出錯***********
: : string SQL1 = "Begin (略) END; Select * From START, END ";
: : OracleCommand cmd1 = new OracleCommand(SQL1, conn);
: : OracleDataReader objRead = cmd1.ExecuteReader();
: : **********以上程式出錯**************
: : *********以下程式可以正常執行**********
: : string SQL1 = "Begin (略) END;"
: : OracleCommand cmd1 = new OracleCommand(SQL1, conn);
: : cmd1.ExecuteNonQuery();
: : string SQL2 = "Select * from START, END ";
: : cmd1.CommandText=orstrSQL2;
: : OracleDataReader objRead = cmd1.ExecuteReader();
: : 雖然可以正常執行 但已經被Oracle試做二次連線
: : 無法Select到 SQL1的執行結果
: : 但我的OracleConnection 和 OracleCommad 是同一個物件了阿
: : ***************************************
: 1、看了一下你的目的,好像並不需要建臨時表啊?
: 起點跟終點50m內的站牌,不能直接即時select出來嗎?
: 如果是怕這份資料一直要用到,其實就一直重覆select就行了,
: 資料庫會自己做cache,不用擔心效能問題。
: 2、begin後面的select語句,只能用來把select出來的資料,塞進參數中,
: 不能像你那樣,select出整張表放進datareader。
: 所以勢必要分兩段寫:
: string SQL1 = "Begin (略) END;"
: OracleCommand cmd1 = new OracleCommand(SQL1, conn);
: cmd1.ExecuteNonQuery();
: cmd1.Commit(); //一定要commit,否則資料並沒有真正塞進table中
: cmd1.CommandText="Select * from START";
: OracleDataReader objRead = cmd1.ExecuteReader();
: .........
: 不過這樣寫,也已經很簡單了,不知道你的問題點在哪兒?
抱歉,是我搞錯,你沒有用Transaction,所以不需要Commit。
(沒開vs.net就憑空回文Orz..)
如果你用ExecuteNonQuery()是直接就Commit了。
不過還是建議用Transaction配合Try..Catch的寫法,
這樣有錯誤時,可以補捉並RollBack(),沒錯再Commit()
另外我猜你的問題可能出在臨時表的建立,你試著改成
CREATE GLOBAL TEMPORARY TABLE START
{
S1 NUMBER,
S2 NUMBER
} On Commit Preserve Rows;
^^^^^^^^^^^^^^^^^^^^^^^^^^
多加這行試試。
另外,你的Select,務必要用同一個連線,不要再另外建Connection,
這樣才看得到資料。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.166.140.120
推
06/07 19:17, , 1F
06/07 19:17, 1F
推
06/07 19:34, , 2F
06/07 19:34, 2F
推
06/07 19:46, , 3F
06/07 19:46, 3F
推
06/07 19:51, , 4F
06/07 19:51, 4F
推
06/07 20:35, , 5F
06/07 20:35, 5F
推
06/07 21:21, , 6F
06/07 21:21, 6F
推
06/07 21:30, , 7F
06/07 21:30, 7F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 3 之 3 篇):