我有一个关于从oracle db provide读取数据的问题。
如下所示,我们拥有自己的DAL。 我们使用下面的课程连接到DB。 在EntityLayer(我们连接到db)中,程序连接到db以运行具有特定值的Select Data SP。 SP的名称是: SwordBros_SP ,需要p_A_Value,p_B_Value,p_Cursor。
p_A_Value = 41455;
p_B_Value = 15556;
当我在PLSQL Developer工具上运行测试时,它返回一个只有一行的表。 (大!)
但是当我在程序上调用sp时。 (.Net 2.0,winForms Project,FacedeDesignPattern)
// TheFacade.cs
..
DB db = new DB();
db.BeginTran();
..
//The db is initiliazed on facadeLayer, and is sent to the EntityLayer for db operations.
// db is used in another update/insert operations during the transaction.
// the SP Execution that is showed below, is just one operation during the transaction.
..
// TheEntitiy.cs
{
OracleParameter pCursor = new OracleParameter("p_Cursor", OracleDbType.RefCursor, ParameterDirection.InputOutput);
OracleParameter pAValue = new OracleParameter("p_A_Value", p_A_Value);
OracleParameter pBValue = new OracleParameter("p_B_Value", p_B_Value);
DataRow dr = db.ExecDataSet("SwordBros_SP", pAValue , pBValue , pCursor).Tables[0].Rows[0]
如下所示,没有行返回!它为行[0]抛出错误... 但我知道这个查询有数据,正如您在测试环境中看到的那样!
当我尝试使用新的数据库newDb = DB()调用此sp时;它很完美 返回数据?为什么,为什么需要另一个新的DB事务?
DataRow dr = newDb.ExecDataSet("SwordBros_SP", pAValue , pBValue , pCursor).Tables[0].Rows[0] -- Works Great Again !
// DB.cs
using Oracle.DataAccess.Client;
using System;
using System.Data;
using System.Data.SqlClient;
namespace SwordBrosTech.App.Data
{
public class DB : IDisposable
{
..
}
}