2014-07-08 15 views
10

Jak przekazać zmienną tablicową do procedury składowanej SQL Server przy użyciu C# i wstawić wartości tablicowe do całego wiersza?Przekazywanie macierzy do procedury przechowywanej serwera SQL

Z góry dziękuję.

SQL Server tabela:

ID | Product | Description 
------------------------------- 
8A3H | Soda | 600ml bottle 

C# tablicy:

string[] info = new string[] {"7J9P", "Soda", "2000ml bottle"}; 

SQL Server procedura przechowywana:

ALTER PROC INSERT 
    (@INFO_ARRAY ARRAY) 
AS 
BEGIN 
    INSERT INTO Products VALUES (@INFO_ARRAY) 
END 
+2

Czy istnieje jakikolwiek powód, dlaczego nie można po prostu użyć wielu parametrów lub jesteś po prostu patrząc na skróty? –

+4

To może pomóc - http://stackoverflow.com/questions/11102358/how-to-pass-an-array-into-a-sql-server-stored-procedure?rq=1 –

+0

Po prostu szukam skrótu. @DStanley – user3658439

Odpowiedz

18

W SQL Server 2008 i później

Tworzenie typu SQL Server tak:

CREATE TYPE dbo.ProductArray 
AS TABLE 
(
    ID INT, 
    Product NVARCHAR(50), 
    Description NVARCHAR(255) 
); 

zmienić swoje procedury w SQL Server:

ALTER PROC INSERT_SP 
@INFO_ARRAY AS dbo.ProductArray READONLY 
AS 
BEGIN 
    INSERT INTO Products SELECT * FROM @INFO_ARRAY 
END 

to musisz stworzyć DataTable obiekt o wartości do przekazania w C#:

DataTable dt = new DataTable(); 
//Add Columns 
dt.Columns.Add("ID"); 
dt.Columns.Add("Product"); 
dt.Columns.Add("Description"); 
//Add rows 
dt.Rows.Add("7J9P", "Soda", "2000ml bottle"); 

using (conn) 
{ 
    SqlCommand cmd = new SqlCommand("dbo.INSERT_SP", conn); 
    cmd.CommandType = CommandType.StoredProcedure; 
    SqlParameter dtparam = cmd.Parameters.AddWithValue("@INFO_ARRAY", dt); 
    dtparam.SqlDbType = SqlDbType.Structured; 
} 
+0

Wygląda prawie identycznie jak odpowiedź w linku, który napisałem powyżej. Napisałeś to sam, czy zmieniłeś tę odpowiedź? –

+0

Napisałem to na podstawie kodu, który napisałem kilka tygodni temu, na podstawie artykułu, który znalazłem tutaj: [link] (http://www.codeproject.com/Questions/631284/How-to-pass-an-array- to-SQL-SERVER-stored-pro) – kerbasaurus

+0

Mam błąd w procedurze składowanej: "Należy zadeklarować zmienną skalarną" @INFO_ARRAY "" @kerbasaurus – user3658439

2

o to sposób prostszy przykład:

mam przeszukując wszystkie przykłady i odpowiedzi, jak przekazać dowolną tablicę do serwera sql, dopóki nie znalazłem tego linK, poniżej jest jak zastosowałem to do mojego projektu:

- Poniższy kod otrzyma tablicę jako parametr i wstawić wartości tego --array do innej tabeli

Create Procedure Proc1 



@INFO_ARRAY ARRAY nvarchar(max) //this is the array your going to pass from C# code 

AS 

    declare @xml xml 

    set @xml = N'<root><r>' + replace(@INFO_ARRAY,',','</r><r>') + '</r></root>' 

    Insert into Products 
    select 
    t.value('.','varchar(max)') 


    from @xml.nodes('//root/r') as a(t) 
END 

nadzieję, że docenisz to

+0

Wznowione, ale czy w komentarzu powinien być "ARRAY"? – Panzercrisis

Powiązane problemy