我正在开发.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>
答案 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)