使用ADO.Net传递表值参数

如何使用ADO.Net将表值parameter passing给存储过程?

  1. 在SQL Server中创buildtypes

    CREATE TYPE [dbo].[MyDataType] As Table ( ID INT, Name NVARCHAR(50) ) 
  2. 创build过程

     CREATE PROCEDURE [dbo].[MyProcedure] ( @myData As [dbo].[MyDataType] Readonly ) AS BEGIN SELECT * FROM @myData END 
  3. 在C#中创build数据表

     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. 创buildSQL参数

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

我试过这个,并收到exception:

表types参数“@MyDataType”必须有一个有效的types名称。

我必须设置SqlParameter的“TypeName”属性:

 parameter.TypeName = "MyDataType"; 

此问题是如何从.net代码传递表值参数存储过程的副本。 请参阅这个问题,举例说明如何使用DataTableIEnumerable<SqlDataRecord>

你可以用Exec前缀

 using( SqlConnection con = new SqlConnection( "Server=.;database=employee;user=sa;password=12345" ) ) { SqlCommand cmd = new SqlCommand( " exec ('drop table '+@tab)" , con ); cmd.Parameters.AddWithValue( "@tab" ,"Employee" ); con.Open( ); cmd.ExecuteNonQuery( ); }