gpt4 book ai didi

c# - 使用 ServiceStack ORMLite 将数据表传递给 SP

转载 作者:太空狗 更新时间:2023-10-30 00:19:29 25 4
gpt4 key购买 nike

我必须调用一个存储过程但传递一个数据表(一个 iEnumerable)作为参数。

我在 SQL 服务器上的 SP 将此参数作为:

@LIST_USERS dbo.LIST_USERINFO_TYPE READONLY

类型定义为:

CREATE TYPE [dbo].[LIST_USERINFO_TYPE] AS TABLE(
[ID_USER] [int] NOT NULL,
[ID_DATA] [int] NOT NULL,
[HEADER_TXT] [varchar](100) NULL)

然后,在调用方,我以这种方式创建参数:

list.Add(new UserInfoItem { IdUser = 401, IdData = 3, HeaderTxt = "" });
list.Add(new UserInfoItem { IdUser= 402, IdData= 2, HeaderTxt= "gotcha" });
list.Add(new UserInfoItem { IdUser= 403, IdData= 1, HeaderTxt= "pacific rim" });

dbConn.StoredProcedure(sp,
new
{
LISTA_QUESTIONARIO = DomandeRisposteList
});

当我启动该项目时,它实际上停止并出现 KeyNotFoundException 试图

name.DbType = OrmLiteConfig.DialectProvider.GetColumnDbType(propertyInfo.PropertyType);

ServiceStackExtension.cs

我怎样才能做到这一点?

最佳答案

我使用简单的数据表自行找到了答案:

        DataTable dataTableTmp = new DataTable();
dataTableTmp.Columns.Add("ID_USER", typeof(Int32));
dataTableTmp.Columns.Add("ID_DATA", typeof(Int32));
dataTableTmp.Columns.Add("HEADER_TXT", typeof(string));


foreach (var r in DomandeRisposteList)
{
DataRow ro = dataTableTmp.NewRow();
ro[0] = r.IdUser;
ro[1] = r.IdData ;
ro[2] = r.HeaderTxt ;

dataTableTmp.Rows.Add(ro);
}

var dbConn = dbFactory.OpenDbConnection();

var res = dbConn.Exec(dbCmd =>
{
dbCmd.CommandType = CommandType.StoredProcedure;
dbCmd.Parameters.Add(new SqlParameter("@LISTA_QUESTIONARIO", dataTableTmp));
dbCmd.CommandText = "IF_SP_QUESTIONARIO_INSERT_TEST";
return dbCmd.ExecuteReader().ConvertToList<DomandeRisposteItem>();
});

return res;

关于c# - 使用 ServiceStack ORMLite 将数据表传递给 SP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19953296/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com