使用ADO.Net传递表值参数
如何使用ADO.Net将表值parameter passing给存储过程?
-
在SQL Server中创buildtypes :
CREATE TYPE [dbo].[MyDataType] As Table ( ID INT, Name NVARCHAR(50) )
-
创build过程 :
CREATE PROCEDURE [dbo].[MyProcedure] ( @myData As [dbo].[MyDataType] Readonly ) AS BEGIN SELECT * FROM @myData END
-
在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);
-
创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代码传递表值参数存储过程的副本。 请参阅这个问题,举例说明如何使用DataTable
或IEnumerable<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( ); }