0
我有一個Oracle軟件包,它提供了基於用戶ID的設施列表。它用於確定訪問權限。我們有幾個項目已經使用了這個包,但他們都是VB和WebForms--我們正在轉向C#和MVC,這是第一個使用這個包的項目。使用C#MVC4訪問Oracle軟件包
當試圖在包運行查詢,我得到一個System.InvalidOperationException: The number of parameters does not match number of values for stored procedure.
程序規範(我沒有進入身體,這部分不能被編輯,因爲它是在其他應用中廣泛使用):
Procedure GetFacilitiesByUser
(
p_EmpNo IN int,
cur_OUT out sys_refcursor
);
而我的C#:
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Common;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Practices.EnterpriseLibrary.Common;
using Microsoft.Practices.EnterpriseLibrary.Data;
using Microsoft.Practices.EnterpriseLibrary.Data.Oracle;
namespace MvcApplication1.DataAccess
{
public class InpatientSecurity
{
public List<string> GetHospitals(int EmployeeNumber)
{
var response = new List<string>() { };
object[] _params = { EmployeeNumber };
IDataReader dr = ExecuteQuery(
"connection string",
"datawarehouse.Access.GetFacilitiesByUser",
_params
);
while (dr.Read())
{
response.Add("test");
}
return response;
}
private IDataReader ExecuteQuery(string provider, string procedure, params object[] args)
{
var _db = new OracleDatabase(provider);
object[] objArr = new object[args.Length];
args.CopyTo(objArr, 0);
if (args.Length > 1)
{
objArr[objArr.Length - 1] = System.DBNull.Value;
}
IDataReader reader = _db.ExecuteReader(procedure, objArr); /* Exception thrown here */
_db = null;
return reader;
}
}
}
我沒有寫用來訪問此過程中,原有的VB代碼,這只是一個
調用包不應該是用C#,VB,MVC或Win形式不同。 –