如何将petapocohelper executereader转换为List [C#]

时间:2018-03-14 17:08:45

标签: dotnetnuke petapoco executereader

我正在开发.cs代码以从存储过程中获取数据并将其存储到List中,但是我无法将所有数据集存入List。

SP:

ALTER PROCEDURE [_testSchm].[_test_sp]

@paramINint int,   

@paramINnvarchar nvarchar(max),   

@paramOUTint int OUTPUT,   

@paramOUTnvarchar nvarchar(max) OUTPUT

AS   

set @paramOUTint = @paramINint * 33

set @paramOUTnvarchar = REVERSE(@paramINnvarchar)

select 666 as ResultSet1

select 999 as ResultSet1

return 401

我定义的类填充.cs代码中的列表:

public class readerSQL

{

    public int paramOUTint { get; set; } //esto es de prueba y si, se devuelve a cliente con el valor null porque el SP no lo rellena a su llamada

    public string paramOUTnvarchar { get; set; }

    public int ResultSet1 { get; set; }

    public int ReturnValue { get; set; }

}

.cs代码:

            var paramINint = 3;

            var paramINnvarchar = "carlos";

            var paramOUTint = 0;

            var paramOUTnvarchar = "";

            object[] testJSONParameters = new object[] { paramINint, paramINnvarchar, paramOUTint, paramOUTnvarchar }; 

            IDataReader petaReaderTest = PetaPocoHelper.ExecuteReader( 

                DataProvider.Instance().ConnectionString,

                CommandType.StoredProcedure,

                "_testSchm._test_sp",

                testJSONParameters

            );

            var ReturnJSON = CBO.FillCollection<readerSQL>(petaReaderTest);

ReturnJSON仅返回:

<ArrayOfreaderSQL>
    <readerSQL>
        <ResultSet1>666</ResultSet1>
        <ReturnValue>0</ReturnValue>
        <paramOUTint>0</paramOUTint>
        <paramOUTnvarchar i:nil="true"/>
    </readerSQL>
</ArrayOfreaderSQL>

SQL管理工作室返回的内容:

ColName : ResultSet1

Value :      666

 ---------------------

ColName : ResultSet1

Value :       999

 ----------------

ColName : @paramOUTint   |||    @paramOUTnvarchar

Value :       99         |||          solrac

 -----------------

ColName : Return Value

Value :       401

我希望以json返回(或类似):

<ArrayOfreaderSQL>
    <readerSQL>
        <ResultSet1>666</ResultSet1>
        <ReturnValue>0</ReturnValue>
        <paramOUTint i:nil="true"/>
        <paramOUTnvarchar i:nil="true"/>
    </readerSQL>
    <readerSQL>
        <ResultSet1>999</ResultSet1>
        <ReturnValue>0</ReturnValue>
        <paramOUTint i:nil="true"/>
        <paramOUTnvarchar i:nil="true"/>
    </readerSQL>
    <readerSQL>
        <ResultSet1>0</ResultSet1>
        <ReturnValue>0</ReturnValue>
        <paramOUTint>99</paramOUTint>
        <paramOUTnvarchar>solrac</paramOUTnvarchar>
    </readerSQL>
    <readerSQL>
        <ResultSet1>0</ResultSet1>
        <ReturnValue>401</ReturnValue>
        <paramOUTint i:nil="true"/>
        <paramOUTnvarchar i:nil="true"/>
    </readerSQL>
</ArrayOfreaderSQL>

1 个答案:

答案 0 :(得分:1)

你使用petapoco的方式更像是基本的.net sqlClient对象然后petapoco ...你需要学习如何使用petapoco ......

您需要的步骤是:

首先:使用您的连接字符串和支持的提供程序实例化petapoco数据库的新实例。 var database = new PetaPoco.Database(cnx,provider);

然后:您可以使用fetch<T>()从列表中的数据库中获取数据。也许使用SQL助手来构建你的sql,因为你有进出参数。 (fetch(string sql)可以在字符串中处理有效的sql语句,并返回查询结果。(在你的情况下不是out params)。

有关sql store procs的参数,请参阅http://www.enkelmedia.se/blogg/2014/5/3/stored-procedures-with-output-parameters-using-petapoco.aspx

var sql = PetaPoco.Sql.Builder()
    .Select("*")
    .From("")
    .Where("field = @0", fieldvalue);
var resultFromDb = database.Fetch<ObjToMatchSQLQuery>(sql); // ObjToMatchSQLQuery can be dynamic

之后,您将拥有一个对象列表,就像您手动完成的一样。最终将您的列表推送到JSON转换器,您将拥有所需的一切。

aka JSONCONVERTOR.serialize<ObjToSerialiseTo>(resultFromDb)