0

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

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>
4

1 回答 1

1

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

您需要的步骤是:

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

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

对于带有 sql 存储过程的参数,请参阅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)
于 2018-03-14T18:48:16.737 回答