我得到以下行 returnMessage = ((command.Parameters[4].Value);
檢索PLSQLAssociativeArray的瓦萊斯在C#
的誤差實際上我的代碼通過各種類型爲List陣列作爲一個參數到Oracle通過使用Oracle存儲過程。鑑於
List<string> AccNo = new List<string>();
List<Double> TrnAmt = new List<Double>();
List<int> TranNo = new List<int>();
List<string> rec = new List<string>();
AccNo.Add(data_read3[3].ToString());
TrnAmt.Add(Double.Parse(data_read3[0].ToString()));
TranNo.Add(trnno);
rec = cn_new.Call_Procedure_Host("Host_to_Host.host_record", AccNo, TrnAmt,
TranNo, CONNECTION_STRING_other);
現在Call_Procedure_Host的代碼將返回輸出參數,這也是給
public List<string> Call_Procedure_Host(string a, List<string> b, List<double> c, List<int> d,string cn)
{
OracleParameter op = null;
try
{
connection.Close();
connection.ConnectionString = cn;
connection.Open();
OracleCommand command = connection.CreateCommand();
command.CommandText = a;
command.CommandType = CommandType.StoredProcedure;
var arry = command.Parameters.Add("Accno", OracleDbType.Varchar2);
//op = new OracleParameter("Accno", OracleDbType.Varchar2);
arry.Direction = ParameterDirection.Input;
arry.CollectionType = OracleCollectionType.PLSQLAssociativeArray;
arry.Value = b.ToArray();
arry.Size = b.Count();
arry.ArrayBindSize = b.Select(_ => _.Length).ToArray();
arry.ArrayBindStatus = Enumerable.Repeat(OracleParameterStatus.Success, b.Count()).ToArray();
//op.Value = b;
//command.Parameters.Add(op);
var arry1 = command.Parameters.Add("Trnamount", OracleDbType.Double);
//op = new OracleParameter("Accno", OracleDbType.Varchar2);
arry1.Direction = ParameterDirection.Input;
arry1.CollectionType = OracleCollectionType.PLSQLAssociativeArray;
arry1.Value = c.ToArray();
arry1.Size = c.Count();
arry1.ArrayBindSize = c.Select(_ => _.ToString().Length).ToArray();
arry1.ArrayBindStatus = Enumerable.Repeat(OracleParameterStatus.Success, c.Count()).ToArray();
//op.Value = b;
//command.Parameters.Add(op);
var arry2 = command.Parameters.Add("Trnno", OracleDbType.Int32);
//op = new OracleParameter("Accno", OracleDbType.Varchar2);
arry2.Direction = ParameterDirection.Input;
arry2.CollectionType = OracleCollectionType.PLSQLAssociativeArray;
arry2.Value = d.ToArray();
arry2.Size = d.Count();
arry2.ArrayBindSize = d.Select(_ => _.ToString().Length).ToArray();
arry2.ArrayBindStatus = Enumerable.Repeat(OracleParameterStatus.Success, d.Count()).ToArray();
var arry3 = command.Parameters.Add("returnMessage", OracleDbType.Varchar2);
//op = new OracleParameter("Accno", OracleDbType.Varchar2);
arry3.Direction = ParameterDirection.Output;
arry3.CollectionType = OracleCollectionType.PLSQLAssociativeArray;
arry3.Size = d.Count();
arry3.ArrayBindSize = c.Select(_ => _.ToString().Length).ToArray();
arry3.ArrayBindStatus = Enumerable.Repeat(OracleParameterStatus.Success, d.Count()).ToArray();
int r = command.ExecuteNonQuery();
connection.Close();
List<string> returnMessage = new List<string>();
returnMessage = ((command.Parameters[4].Value);
return returnMessage;
}
現在我在網上收到錯誤returnMessage = ((command.Parameters[4].Value);
錯誤CS0266不能隱一個陣列list.The碼將類型「對象」轉換爲「System.Collections.Generic.List」。存在明確的轉換(您是否缺少演員?)
請幫我解決問題。
我已經使用這個代碼,但仍然得到錯誤 –
無法投類型的對象Oracle.DataAccess.Types.OracleString []'鍵入「System.String [] –
@AhhijitGhosh:對不起,我提供的代碼與託管驅動程序一起工作,但似乎你沒有使用它。我編輯了我的問題,包括如何從「OracleString」數組中讀取字符串,請讓我知道如果這不起作用。 –