作者diamondking (迷惘)
看板Database
标题Re: [问题]Asp.net读Oracle的问题
时间Mon Jun 2 22:07:58 2008
※ 引述《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();
.........
不过这样写,也已经很简单了,不知道你的问题点在哪儿?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 118.166.135.63
1F:推 weinine32:因为这二份资料会重覆用到所以,才会想做 临时资料表 06/05 23:11
2F:推 weinine32:CACHE的事情也想过,不过跑出来的效果很差才会想这样做 06/05 23:17
3F:推 weinine32:问题出在 我之前分两段写没加cmd1.Commit(); 捞不到东西 06/05 23:24
4F:推 weinine32:所以加了就行了? 明天试试看如果成功 P币奉上 多谢 06/05 23:31
5F:推 weinine32:发生错误"不包含 'Commit' 的定义"可否解识一下谢谢 06/06 00:24