У меня проблема с чтением данных из базы данных oracle db.
Как вы видите ниже, у нас есть собственный DAL.
Подключаемся к БД используя этот класс ниже.
В EntityLayer (где мы подключаемся к БД), программа подключается к БД для запуска 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, 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] ...
Но я знаю, что есть данные для этого запроса, как вы видите в тестовой среде!
Когда я пытался вызвать этот sp, используя новую БД newDb = 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
{
..
}
}