返回C#的输出参数

问题描述 投票:0回答:1

我有一个过程,有两个输入参数和两个输出参数。目前其工作正常。但是,我想把程序的两个输出参数存储在一个变量中。谁能指导我怎么做。

存储过程的代码。

create or replace PROCEDURE P_LOGIN_USER
(
    USERNAME IN VARCHAR2 
   , ENCRYPTIONKEY IN VARCHAR2 
   , OUT_STATUS OUT VARCHAR2 
   , OUT_STATUS_DESC OUT VARCHAR2
) 

------------------------Procedure Code
END P_LOGIN_USER

我在C#代码中指定了输入参数,缺少的部分是获取输出参数。缺少的部分是获取输出参数

OracleCommand cmd = new OracleCommand("P_LOGIN_USER", OrCon);
cmd.CommandType = CommandType.StoredProcedure;

OracleParameter in_username = new OracleParameter();
in_username.OracleDbType = OracleDbType.Varchar2;
in_username.Direction = ParameterDirection.Input;
in_username.Size = 500;
in_username.Value = username;
cmd.Parameters.Add(in_username);

OracleParameter in_ecnryptionkey = new OracleParameter();
in_ecnryptionkey.OracleDbType = OracleDbType.Varchar2;
in_ecnryptionkey.Direction = ParameterDirection.Input;
in_ecnryptionkey.Size = 500;
in_ecnryptionkey.Value = password;
cmd.Parameters.Add(in_ecnryptionkey);

OracleParameter out_1 = new OracleParameter();
out_1.OracleDbType = OracleDbType.Varchar2;
out_1.Direction = ParameterDirection.Output;
out_1.Size = 500;
cmd.Parameters.Add(out_1);

OracleParameter out_2 = new OracleParameter();
out_2.OracleDbType = OracleDbType.Varchar2;
out_2.Direction = ParameterDirection.Output;
out_2.Size = 500;
cmd.Parameters.Add(out_2);

try
{
OrCon.Open();
cmd.ExecuteNonQuery();

cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "P_LOGIN_USER";
cmd.Parameters.Add(new OracleParameter
{
	ParameterName = "result",
	Size = 1,
	Direction = ParameterDirection.ReturnValue,
	OracleDbType = OracleDbType.Varchar2
});


}
catch (OracleException ex)
{
Console.Write(ex.Message);
}

OrCon.Close();
c# asp.net oracle procedure
1个回答
0
投票

你可以像这样获取输出参数的值。

string outputStatus = Convert.ToString(cmd.Parameters["@OUT_STATUS "].Value); 

把上面的一行放在 ExecuteNonQuery()


0
投票

存储过程代码。

创建或替换 PROCEDURE P_LOGIN_USER( USERNAME IN VARCHAR2 , ENCRYPTIONKEY IN VARCHAR2 , p_recordset OUT SYS_REFCURSOR) ISBEGIN OPEN p_recordset FOR SELECT OUT_STATUS ,OUT_STATUS_DESC ...... END

C#:

using (var reader = cmd.ExecuteReader())
                        {
                            List<ListModel> obj= reader.MapToList<ListModel>();
                            return obj;
                        }

## **MapToList** ##
 public static List<T> MapToList<T>(this DbDataReader dr) where T : new()
        {
            if (dr != null && dr.HasRows)
            {
                var entity = typeof(T);
                var entities = new List<T>();
                var propDict = new Dictionary<string, PropertyInfo>();
                var props = entity.GetProperties(BindingFlags.Instance | BindingFlags.Public);
                propDict = props.ToDictionary(p => p.Name.ToUpper(), p => p);
                List<string> log = new List<string>();
                while (dr.Read())
                {
                    try
                    {
                        T newObject = new T();
                        for (int index = 0; index < dr.FieldCount; index++)
                        {
                            var columnname = dr.GetName(index).ToUpper();
                            if (propDict.ContainsKey(dr.GetName(index).ToUpper()))
                            {
                                var info = propDict[dr.GetName(index).ToUpper()];
                                if ((info != null) && info.CanWrite)
                                {
                                    try
                                    {
                                        var val = dr.GetValue(index);
                                        info.SetValue(newObject, (val == DBNull.Value) ? null : val, null);
                                    }
                                    catch (Exception ex)
                                    {
                                        var columename= dr.GetName(index).ToUpper();
                                        var val= dr.GetValue(index);
                                        var getype = val.GetType();
                                        log.Add(columename + ":" + val + ":" + getype.ToString());
                                    }
                                }
                            }
                        }
                        entities.Add(newObject);
                    }
                    catch (Exception ex)
                    {

                    }
                }
                return entities;
            }
            return null;
        }

© www.soinside.com 2019 - 2024. All rights reserved.