Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 调用返回值的数据库存储函数或存储过程_C#_Oracle_Stored Procedures_Stored Functions_Linq2db - Fatal编程技术网

C# 调用返回值的数据库存储函数或存储过程

C# 调用返回值的数据库存储函数或存储过程,c#,oracle,stored-procedures,stored-functions,linq2db,C#,Oracle,Stored Procedures,Stored Functions,Linq2db,在oracle 12数据库中使用linq2db时,如何调用返回值的存储函数或存储过程?从我能找到的信息来看,解决方案似乎是: IEnumerable<T> QueryProc<T>( this DataConnection connection, string sql, params DataParameter[] parameters); 我用linq2db按以下方式调用它: DataParameter[] para = { new Dat

在oracle 12数据库中使用linq2db时,如何调用返回值的存储函数或存储过程?从我能找到的信息来看,解决方案似乎是:

IEnumerable<T> QueryProc<T>(
    this DataConnection connection, 
    string sql, 
    params DataParameter[] parameters);
我用linq2db按以下方式调用它:

DataParameter[] para = { new DataParameter("inputParm", "some_string", DataType.VarChar), new DataParameter("outputParm", "", DataType.VarChar) };

var res = myDataContext.QueryProc<string>("TESTPROC", para).FirstOrDefault();
DataParameter[]para={newdataparameter(“inputParm”,“some_string”,DataType.VarChar),newdataparameter(“outputParm”,“”“,DataType.VarChar”);
var res=myDataContext.QueryProc(“TESTPROC”,para).FirstOrDefault();

我做错了什么?

更新:更新后的答案是正确的

IEnumerable QueryProc(…)
返回值是一个数据集,由过程/函数通过select语句返回

如果您的过程不返回表,则需要使用非通用版本的
ExecuteProc
,它只返回受影响记录的数量

要获取输出参数值,您需要访问命令中的参数:
((IDbDataParameter)dataConnection.Command.Parameters[“parameter_name]”)。Value

下面是由T4模板生成的linq2db测试中的过程调用帮助器示例:

public static int OUTREFTEST(this DataConnection dataConnection, decimal? PID, out decimal? POUTPUTID, ref decimal? PINPUTOUTPUTID, string PSTR, out string POUTPUTSTR, ref string PINPUTOUTPUTSTR)
    {
        var ret = dataConnection.ExecuteProc("TESTUSER.OUTREFTEST",
            new DataParameter("PID",             PID,             DataType.Decimal),
            new DataParameter("POUTPUTID", null,       DataType.Decimal) { Direction = ParameterDirection.Output, Size = 22 },
            new DataParameter("PINPUTOUTPUTID",  PINPUTOUTPUTID,  DataType.Decimal) { Direction = ParameterDirection.InputOutput, Size = 22 },
            new DataParameter("PSTR",            PSTR,            DataType.NVarChar),
            new DataParameter("POUTPUTSTR", null,      DataType.NVarChar) { Direction = ParameterDirection.Output },
            new DataParameter("PINPUTOUTPUTSTR", PINPUTOUTPUTSTR, DataType.NVarChar) { Direction = ParameterDirection.InputOutput });

        POUTPUTID       = Converter.ChangeTypeTo<decimal?>(((IDbDataParameter)dataConnection.Command.Parameters["POUTPUTID"]).      Value);
        PINPUTOUTPUTID  = Converter.ChangeTypeTo<decimal?>(((IDbDataParameter)dataConnection.Command.Parameters["PINPUTOUTPUTID"]). Value);
        POUTPUTSTR      = Converter.ChangeTypeTo<string>  (((IDbDataParameter)dataConnection.Command.Parameters["POUTPUTSTR"]).     Value);
        PINPUTOUTPUTSTR = Converter.ChangeTypeTo<string>  (((IDbDataParameter)dataConnection.Command.Parameters["PINPUTOUTPUTSTR"]).Value);

        return ret;
    }
public static int-OUTREFTEST(此数据连接数据连接、十进制PID、输出十进制POUTPUTID、参考十进制PINPUTPUTID、字符串PSTR、输出字符串POUTPUTSR、参考字符串PINPUTPUTSR)
{
var ret=dataConnection.ExecuteProc(“TESTUSER.OUTREFTEST”,
新数据参数(“PID”,PID,数据类型.Decimal),
新数据参数(“POUTPUTID”,null,DataType.Decimal){Direction=ParameterDirection.Output,Size=22},
新的数据参数(“PINPUTOUTPUTID”,PINPUTOUTPUTID,DataType.Decimal){Direction=ParameterDirection.InputOutput,Size=22},
新的数据参数(“PSTR”,PSTR,DataType.NVarChar),
新的数据参数(“POUTPUTSTR”,null,DataType.NVarChar){Direction=ParameterDirection.Output},
新的数据参数(“PINPUTOUTPUTSTR”,PINPUTOUTPUTSTR,DataType.NVarChar){Direction=ParameterDirection.InputOutput});
POUTPUTID=Converter.ChangeTypeTo(((IDbDataParameter)dataConnection.Command.Parameters[“POUTPUTID”]).Value);
PINPUTOUTPUTID=Converter.ChangeTypeTo((IDbDataParameter)dataConnection.Command.Parameters[“PINPUTOUTPUTID”]).Value);
POUTPUTSR=Converter.ChangeTypeTo(((IDbDataParameter)dataConnection.Command.Parameters[“POUTPUTSR”]).Value);
PINPUTOUTPUTSTR=Converter.ChangeTypeTo((IDbDataParameter)dataConnection.Command.Parameters[“PINPUTOUTPUTSTR”]).Value);
返回ret;
}

更新:更新后的答案正确无误

IEnumerable QueryProc(…)
返回值是一个数据集,由过程/函数通过select语句返回

如果您的过程不返回表,则需要使用非通用版本的
ExecuteProc
,它只返回受影响记录的数量

要获取输出参数值,您需要访问命令中的参数:
((IDbDataParameter)dataConnection.Command.Parameters[“parameter_name]”)。Value

下面是由T4模板生成的linq2db测试中的过程调用帮助器示例:

public static int OUTREFTEST(this DataConnection dataConnection, decimal? PID, out decimal? POUTPUTID, ref decimal? PINPUTOUTPUTID, string PSTR, out string POUTPUTSTR, ref string PINPUTOUTPUTSTR)
    {
        var ret = dataConnection.ExecuteProc("TESTUSER.OUTREFTEST",
            new DataParameter("PID",             PID,             DataType.Decimal),
            new DataParameter("POUTPUTID", null,       DataType.Decimal) { Direction = ParameterDirection.Output, Size = 22 },
            new DataParameter("PINPUTOUTPUTID",  PINPUTOUTPUTID,  DataType.Decimal) { Direction = ParameterDirection.InputOutput, Size = 22 },
            new DataParameter("PSTR",            PSTR,            DataType.NVarChar),
            new DataParameter("POUTPUTSTR", null,      DataType.NVarChar) { Direction = ParameterDirection.Output },
            new DataParameter("PINPUTOUTPUTSTR", PINPUTOUTPUTSTR, DataType.NVarChar) { Direction = ParameterDirection.InputOutput });

        POUTPUTID       = Converter.ChangeTypeTo<decimal?>(((IDbDataParameter)dataConnection.Command.Parameters["POUTPUTID"]).      Value);
        PINPUTOUTPUTID  = Converter.ChangeTypeTo<decimal?>(((IDbDataParameter)dataConnection.Command.Parameters["PINPUTOUTPUTID"]). Value);
        POUTPUTSTR      = Converter.ChangeTypeTo<string>  (((IDbDataParameter)dataConnection.Command.Parameters["POUTPUTSTR"]).     Value);
        PINPUTOUTPUTSTR = Converter.ChangeTypeTo<string>  (((IDbDataParameter)dataConnection.Command.Parameters["PINPUTOUTPUTSTR"]).Value);

        return ret;
    }
public static int-OUTREFTEST(此数据连接数据连接、十进制PID、输出十进制POUTPUTID、参考十进制PINPUTPUTID、字符串PSTR、输出字符串POUTPUTSR、参考字符串PINPUTPUTSR)
{
var ret=dataConnection.ExecuteProc(“TESTUSER.OUTREFTEST”,
新数据参数(“PID”,PID,数据类型.Decimal),
新数据参数(“POUTPUTID”,null,DataType.Decimal){Direction=ParameterDirection.Output,Size=22},
新的数据参数(“PINPUTOUTPUTID”,PINPUTOUTPUTID,DataType.Decimal){Direction=ParameterDirection.InputOutput,Size=22},
新的数据参数(“PSTR”,PSTR,DataType.NVarChar),
新的数据参数(“POUTPUTSTR”,null,DataType.NVarChar){Direction=ParameterDirection.Output},
新的数据参数(“PINPUTOUTPUTSTR”,PINPUTOUTPUTSTR,DataType.NVarChar){Direction=ParameterDirection.InputOutput});
POUTPUTID=Converter.ChangeTypeTo(((IDbDataParameter)dataConnection.Command.Parameters[“POUTPUTID”]).Value);
PINPUTOUTPUTID=Converter.ChangeTypeTo((IDbDataParameter)dataConnection.Command.Parameters[“PINPUTOUTPUTID”]).Value);
POUTPUTSR=Converter.ChangeTypeTo(((IDbDataParameter)dataConnection.Command.Parameters[“POUTPUTSR”]).Value);
PINPUTOUTPUTSTR=Converter.ChangeTypeTo((IDbDataParameter)dataConnection.Command.Parameters[“PINPUTOUTPUTSTR”]).Value);
返回ret;
}