.net – 行使1个OracleCommand添补多个DataTable
发布时间:2021-01-24 22:41:22 所属栏目:站长百科 来源:网络整理
导读:我在SOF上发明白一些关于怎样针对Oracle运行多个查询的题目/谜底(BEGIN END块,匿名存储进程).我想做的险些沟通,但我但愿这些查询可以或许“一次性”添补多个DataTable: 以是不是我们泛泛的:每个DataTable一个查询就像 (这是’伪代码’,不是一个有用的例子!) O
|
我在SOF上发明白一些关于怎样针对Oracle运行多个查询的题目/谜底(BEGIN END块,匿名存储进程).我想做的险些沟通,但我但愿这些查询可以或许“一次性”添补多个DataTable: 以是不是我们泛泛的:每个DataTable一个查询就像 Odp.Fill(SomeQuery,SomeDataTable,SomeParameters); 我想做点什么 Odp.Fill( new Query(SomeQuery,SomeParameters),new Query(SomeQuery2,SomeDataTable2,...) 办理要领这只是您可以在一个查询中获取多个表的浩瀚要领之一.PL / SQL CREATE OR REPLACE PACKAGE getBldgRoom AS
/******************************************************************************
NAME: getBldgRoom
PURPOSE:
REVISIONS:
Ver Date Author Description
--------- ---------- --------------- ------------------------------------
1.0 2011-5-27 has986 1. Created this package.
******************************************************************************/
PROCEDURE getBldgRoom(rcBuildingData OUT SYS_REFCURSOR,rcRoomData OUT SYS_REFCURSOR);
END getBldgRoom;
/
CREATE OR REPLACE PACKAGE BODY GETBLDGROOM AS
PROCEDURE getBldgRoom(rcBuildingData OUT SYS_REFCURSOR,rcRoomData OUT SYS_REFCURSOR) IS
BEGIN
OPEN rcBuildingData FOR
select bldg_code,bldg_desc from IH_CSI_OWNER.BUILDING;
OPEN rcRoomData FOR
select bldg_code,room_code,room_desc from IH_CSI_OWNER.ROOM;
END getBldgRoom;
END GETBLDGROOM;
/
C#代码 using System;
using System.Data;
using Oracle.DataAccess.Client; //Needs Oracle Data Access Client (ODAC)
namespace ClassLibrary
{
public class TwoTableDataSet
{
public DataSet getTwoTables()
{
OracleConnection conn = new OracleConnection();
//Normally we get the connection string from the web.config file or the app.config file
conn.ConnectionString = "Persist Security Info=False;User Id=*USER_NAME*;Password=*USER_PASSWORD*;Data Source=*DataBaseName*";
DataSet ds = new DataSet();
try
{
conn.Open();
//------------------------------------------------------------------------------------------------------
//Set up the select command
OracleCommand cmd = new OracleCommand();
cmd.BindByName = true; //If you do not bind by name,you must add parameters in the same order as they are listed in the procedure signature.
cmd.Connection = conn;
cmd.CommandType = CommandType.StoredProcedure; //A procedure in an oracle package
cmd.CommandText = "GETBLDGROOM.GetBldgRoom"; //The name of the procedure
cmd.Parameters.Add("rcBuildingData",OracleDbType.RefCursor,ParameterDirection.Output);
cmd.Parameters.Add("rcRoomData",ParameterDirection.Output);
OracleDataAdapter da = new OracleDataAdapter();
da.SelectCommand = cmd;
//------------------------------------------------------------------------------------------------------
//get the data from the two tables in the procedure
da.Fill(ds);
//ds now contains ds.Tables[0] and ds.Tables[1]
//Let's give them names
ds.Tables[0].TableName = "BUILDINGS";
ds.Tables[1].TableName = "ROOMS";
//Let's add a relationship between the two tables
DataColumn parentColumn = ds.Tables["BUILDINGS"].Columns["BLDG_CODE"];
DataColumn childColumn = ds.Tables["ROOMS"].Columns["BLDG_CODE"];
DataRelation dr = new System.Data.DataRelation( "BuildingsRooms",parentColumn,childColumn);
ds.Relations.Add(dr);
}
catch (Exception ex)
{
//Add a breakpoint here to view the exception
//Normally the exception would be written to a log file or EventLog in the case of a Web app
//Alternatively,it could be sent to a WebService which logs errors and then it could work for both Web or Windows apps
Exception lex = ex;
}
finally
{
if (conn.State == ConnectionState.Open)
{
conn.Close();
}
}
return ds;
}
}
}
但愿这可以辅佐 哈维萨瑟 (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |

