2012-05-02 31 views

Trả lời

57
  1. Tạo gõ vào SQL Server:

    CREATE TYPE [dbo].[MyDataType] As Table 
    (
        ID INT, 
        Name NVARCHAR(50) 
    ) 
    
  2. Tạo Thủ tục:

    CREATE PROCEDURE [dbo].[MyProcedure] 
    (
        @myData As [dbo].[MyDataType] Readonly 
    ) 
    AS 
    
    BEGIN 
        SELECT * FROM @myData 
    END 
    
  3. Tạo DataTable trong 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. Tạo SQL Parameter:

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

này chỉ áp dụng trong SQL Server 2008 –

+3

Cùng đang làm việc tốt với SQL Server 2012. –

+0

Tôi có nghĩa là điều này chỉ có sẵn máy chủ Sql 2008 trở lên và do đó, nó cũng sẽ hoạt động trong năm 2012. –

9

Tôi cố gắng này và nhận được ngoại lệ:

Bảng tham số kiểu '@MyDataType' phải có một tên kiểu hợp lệ.

tôi đã phải đặt "TypeName" tài sản của SqlParameter:

parameter.TypeName = "MyDataType"; 
+0

có. bạn nói đúng, "TypeName" phải được thiết lập. –

+0

Thêm lược đồ db như là một phần của tên bảng đã làm cho tôi: DataTable myDataTable = new DataTable ("dbo.MyDataType"); – noontz

-3

Bạn có thể thêm tiền tố với 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(); 
    } 
Các vấn đề liên quan