2012-05-02 12 views

Odpowiedz

57
  1. Tworzenie typu SQL Server:

    CREATE TYPE [dbo].[MyDataType] As Table 
    (
        ID INT, 
        Name NVARCHAR(50) 
    ) 
    
  2. Tworzenie Procedura:

    CREATE PROCEDURE [dbo].[MyProcedure] 
    (
        @myData As [dbo].[MyDataType] Readonly 
    ) 
    AS 
    
    BEGIN 
        SELECT * FROM @myData 
    END 
    
  3. Tworzenie DataTable w C#:

    DataTable myDataTable = new DataTable("MyDataType"); 
    myDataTable.Columns.Add("Name", typeof(string)); 
    myDataTable.Columns.Add("Id", typeof(Int32)); 
    myDataTable.Rows.Add("XYZ", 1); 
    myDataTable.Rows.Add("ABC", 2); 
    
  4. Tworzenie SQL parametr:

    SqlParameter parameter = new SqlParameter(); 
    parameter.ParameterName = "@myData"; 
    parameter.SqlDbType = System.Data.SqlDbType.Structured; 
    parameter.Value = myDataTable; 
    command.Parameters.Add(parameter); 
    
+0

ta ma zastosowanie tylko w SQL Server 2008 –

+3

samo działa poprawnie z SQL Server 2012 też. –

+0

Mam na myśli to, że jest dostępny tylko serwer Sql 2008 i wyżej i tak będzie działać również w 2012 roku. –

9

Próbowałem tego i otrzymała wyjątek:

parametr typu stołowego „@MyDataType” musi mieć poprawną nazwę typu.

musiałem ustawić "typename" własność SqlParameter:

parameter.TypeName = "MyDataType"; 
+0

tak. masz rację, "TypeName" musi być ustawiony. –

+0

Dodanie schematu db jako części nazwy tabeli zrobiło to za mnie: DataTable myDataTable = new DataTable ("dbo.MyDataType"); – noontz

-3

Można prefiks z Exec

using(SqlConnection con = new SqlConnection("Server=.;database=employee;user=sa;password=12345")) 
    { 
     SqlCommand cmd = new SqlCommand(" exec ('drop table '[email protected])" , con); 
     cmd.Parameters.AddWithValue("@tab" ,"Employee"); 
     con.Open(); 
     cmd.ExecuteNonQuery(); 
    } 
Powiązane problemy