Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.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#_Sql Server 2008_Stored Procedures_Subsonic_Strongly Typed Dataset - Fatal编程技术网

C# 如何使用存储过程参数从亚音速存储过程调用返回强类型对象?

C# 如何使用存储过程参数从亚音速存储过程调用返回强类型对象?,c#,sql-server-2008,stored-procedures,subsonic,strongly-typed-dataset,C#,Sql Server 2008,Stored Procedures,Subsonic,Strongly Typed Dataset,我有一个数据调用方方法,它返回ItemDatumCollection类型的亚音速集合 存储过程按如下方式执行: itemDatumCollection.LoadAndCloseReader(sp.GetReader()); itemsDataSet = sp.GetDataSet(); actualNumberOfResults = ((Int64)sp.OutputValues[1]); numberOfResults

我有一个数据调用方方法,它返回ItemDatumCollection类型的亚音速集合

存储过程按如下方式执行:

itemDatumCollection.LoadAndCloseReader(sp.GetReader());
            itemsDataSet = sp.GetDataSet();

            actualNumberOfResults = ((Int64)sp.OutputValues[1]);
            numberOfResultsReturned = ((Int64)sp.OutputValues[2]);
但是,我无法以这种方式访问存储过程的输出参数,正如调用sp.GetDataSet()时所做的那样,如下所示:

itemDatumCollection.LoadAndCloseReader(sp.GetReader());
            itemsDataSet = sp.GetDataSet();

            actualNumberOfResults = ((Int64)sp.OutputValues[1]);
            numberOfResultsReturned = ((Int64)sp.OutputValues[2]);
有没有办法使用第一个方法访问存储过程的输出参数?从存储过程调用返回一个亚音速强类型集合


谢谢。

我想做一些类似的事情,结果更改了StoredProcedures.tt文件的大部分内容,我认为亚音速的一些内部内容。在不太详细的情况下,我更改了by.tt文件,以便为给定的存储过程生成此文件:

    public void COMPANIES_ACTIVATE_PACKAGE(long PI_COMPANY_ID, string PI_ACTIVE, long PI_USER_ID, out long PO_ERRCODE, out string PO_ERRMSG, out string PO_ORA_ERRMSG){
        StoredProcedure sp=new StoredProcedure("COMPANIES.ACTIVATE_PACKAGE",this.Provider);
        sp.Command.AddParameter("PI_COMPANY_ID",PI_COMPANY_ID,DbType.Decimal);
        sp.Command.AddParameter("PI_ACTIVE",PI_ACTIVE,DbType.AnsiString);
        sp.Command.AddParameter("PI_USER_ID",PI_USER_ID,DbType.Decimal);
        sp.Command.AddOutputParameter("PO_ERRCODE",DbType.AnsiString);
        sp.Command.AddOutputParameter("PO_ERRMSG",DbType.AnsiString);
        sp.Command.AddOutputParameter("PO_ORA_ERRMSG",DbType.AnsiString);
        sp.Execute();
        var prms = sp.Command.Parameters;
        PO_ERRCODE = ConvertValue<long>(prms.GetParameter("PO_ERRCODE").ParameterValue);
        PO_ERRMSG = ConvertValue<string>(prms.GetParameter("PO_ERRMSG").ParameterValue);
        PO_ORA_ERRMSG = ConvertValue<string>(prms.GetParameter("PO_ORA_ERRMSG").ParameterValue);
    }
我不知道这是否会在没有进一步更改的情况下直接插入SS,但这是我的.tt文件。你也许可以使用它,或者至少知道去哪里:

StoredProcedures.tt:


0){ 
#>  
使用制度;
使用系统数据;
使用系统组件模型;
使用亚音速;
使用亚音速模式;
使用亚音速数据提供者;
名称空间{
公共部分类DB{
公共转换值(对象参数)
{
if(paramVal==null | | Convert.IsDBNull(paramVal))//如果该值为null,则返回所需类型的默认值。
返回默认值(T);
if(typeof(T)=paramVal.GetType())//如果类型已经相等,则不需要转换。只需强制转换即可。
返回(T)参数;
else//类型不匹配。请尝试转换。
{
var conversionType=typeof(T);
if(conversionType.IsGenericType&&conversionType.GetGenericTypeDefinition().Equals(typeof(null)))
{
NullableConverter NullableConverter=新的NullableConverter(conversionType);
conversionType=nullableConverter.UnderlineType;
}
return(T)Convert.ChangeType(paramVal,conversionType);
}
}
公共空间(){
StoredProcedure sp=新的StoredProcedure(“,this.Provider”);
sp.Command.AddParameter(“,,DbType.);
sp.Command.AddOutputParameter(“,DbType.);
sp.Command.AddParameter(“,,DbType.,ParameterDirection.InputOutput”);
sp.Execute();
var prms=sp.Command.Parameters;
=ConvertValue(prms.GetParameter(“”.ParameterValue);
}
}
}
我非常确定,我还必须更改加载数据库提供程序.ttinclude文件中存储的proc数据的查询,以加载指示是in、Out还是InOut参数类型的列

…希望这在某种程度上有所帮助