我需要帮助将表值参数传递给存储过程。 我们有一个层阻止我在我的代码中指定参数类型或SqlDbType。
以下是代码:
DataTable dataTable = new DataTable();
try
{
dataTable.Columns.AddRange(new DataColumn[9]
{
new DataColumn("ITEM_INDEX", Type.GetType("System.Int32")),
new DataColumn("SUBDIV_ID", System.Type.GetType("System.Int32")),
new DataColumn("DISC_STRT_TS",System.Type.GetType("System.String")),
new DataColumn("DISC_END_TS", System.Type.GetType("System.String")),
new DataColumn("DISC_PC", typeof(Decimal)),
new DataColumn("DISC_SPEC_PC",typeof(Decimal)),
new DataColumn("ASSOC_CLASS_CD", System.Type.GetType("System.String")),
new DataColumn("BUSN_CD", System.Type.GetType("System.String")),
new DataColumn("CREATED_BY",System.Type.GetType("System.String"))
});
foreach (var item in subDivisionDiscounts)
{
dataTable.Rows.Add(
item.ItemIndex,
item.SubDiv,
item.FromDate,
item.ToDate,
item.DiscountPercent,
item.SpecialDiscountPercent,
item.AssociateClassCode,
item.BusinessLineCode,
item.CreatedBy);
}
objHt.Clear();
objHt.Add("SUBDIVISIONDISCOUNT", dataTable);
objDs = obj.ExecQuery("ADC_SPCREATE_BULK_SUBDIV_DISCOUNT", CommandType.StoredProcedure, objHt);
ExecQuery()是一个自定义方法,需要3个参数:
ExecQuery的可用重载:
DataSet ExecQuery(string qryData, CommandType type, Hashtable paramTable);
DataSet ExecQuery(string qryData, CommandType type, Hashtable paramTable, int optionalCmdTimeout);
由于我被限制使用此方法,因此无法将SQLDbType传递给execute命令。有没有解决的办法?
答案 0 :(得分:0)
而不是
objHt.Add("SUBDIVISIONDISCOUNT", dataTable);
objDs = obj.ExecQuery("ADC_SPCREATE_BULK_SUBDIV_DISCOUNT", CommandType.StoredProcedure, objHt)
你必须使用
objDs = obj.ExecQuery("ADC_SPCREATE_BULK_SUBDIV_DISCOUNT", CommandType.StoredProcedure, dataTable)
不要忘记创建类型并将其用作存储过程的参数
CREATE TYPE dbo.PersonType AS TABLE
(
Name NVARCHAR(50),
Age INT
);
CREATE PROCEDURE dbo.InsertPerson
@Person dbo.PersonType READONLY
AS
BEGIN
--your code here
END