簡體   English   中英

C#DataTable進入SQL Server存儲過程

[英]C# DataTable into SQL Server stored procedure

我在C#中有一個DataTable ,我正在嘗試將它傳遞給SQL Server。

我有的是:

DataTable asd = new DataTable();

for (int i = 0; i < LocationDataList.Count; i++)
{
    asd.Columns.Add(LocationDataList[i], typeof(string));
}

command.Parameters.Add("@PLocationDataList", SqlDbType.NVarChar, -1).Value = asd;

command.ExecuteNonQuery();

這是程序T-SQL;

ALTER PROCEDURE [Sade].[SPLocationInsert]
     @... INT
     ,@... VARCHAR(64)
     ,@... VARCHAR(MAX)
     ,@... INT
     ,@... INT
     ,@... INT
     ,@... INT
     ,@... INT
     ,@PLocationDataList NVARCHAR(MAX)
AS

我不知道如何傳遞DataTable以及我應該使用哪種數據類型。

提前致謝

在SQL Server中創建用戶定義的表類型:

CREATE TYPE LocationTableType AS TABLE 
( LocationName VARCHAR(50));
GO

並將此表值參數傳遞給存儲過程:

CREATE PROCEDURE [Sade].[SPLocationInsert]
 @... INT
,@... VARCHAR(64)
,@... VARCHAR(MAX)
,@... INT
,@... INT
,@... INT
,@... INT
,@... INT
,@PLocationDataList LocationTableType READONLY
AS 
    SET NOCOUNT ON
    -- insert your code here
GO

參考文獻:

用戶定義的表類型: https//technet.microsoft.com/en-us/library/bb522526(v = sql.105).aspx

表值參數: https//technet.microsoft.com/en-us/library/bb510489(v = sql.105).aspx

您正在嘗試傳遞一個結構化類型的數據表,因此它必須是SqlDbType.Structured類型

command.Parameters.Add("@PLocationDataList", SqlDbType.Structured, -1).Value = asd;

此外,您還必須在SQL Server中創建一個表類型變量

CREATE TYPE dbo.LocationDataList AS TABLE
    ( col1 nvarchar(50) )

檢查表值參數

如果要設置列的類型,請檢查此頁面: https//msdn.microsoft.com/en-us/library/hfx3s9wd(v = vs.110).aspx

您可能需要查看SQLBulkCopy( https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopy ( v= vs.110).aspx)。 它接受每個默認數據表。


當您使用可以輕松轉換的對象時,有一個擴展可用,請參閱https://www.nuget.org/packages/FastMember/

如果你需要多個字符串值,例如,你可以使用逗號分隔的字符串,然后在你的存儲過程中,你可以將這個逗號分隔的字符串拆分為一個表

例如,您將aaa,bbb,ccc傳遞給存儲過程,然后將其拆分為表

1.首先將數據表轉換為XMl,如下所示

DataSet ds = new DataSet();
ds.Tables.Add(dt1); // dataTable 
string dsXml= ds.GetXml();

2.然后將此XML字符串作為一個參數傳遞給存儲過程。

3.在SQL中,MYSQL XML數據類型是定義的。 通過使用它,您可以執行存儲過程。

供參考,請參閱此鏈接

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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