[英]Passing table valued parameters to SP from C#
在將表值參數傳遞給存儲過程時,我需要幫助。 我們有一層阻止我在代碼中指定參數類型或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命令。 有沒有解決的辦法?
代替
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.