簡體   English   中英

將表值參數從C#傳遞到SP

[英]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個參數:

  1. 詢問
  2. 命令類型
  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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM