Pass table value parameter using ADO.Net

How to pass a table parameter to a stored procedure using ADO.Net?

+37
May 2 '12 at 7:38 a.m.
source share
4 answers
  • Create type in SQL Server :

    CREATE TYPE [dbo].[MyDataType] As Table ( ID INT, Name NVARCHAR(50) ) 
  • Create procedure :

     CREATE PROCEDURE [dbo].[MyProcedure] ( @myData As [dbo].[MyDataType] Readonly ) AS BEGIN SELECT * FROM @myData END 
  • Create a DataTable in 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); 
  • Create SQL parameter :

     SqlParameter parameter = new SqlParameter(); parameter.ParameterName = "@myData"; parameter.SqlDbType = System.Data.SqlDbType.Structured; parameter.Value = myDataTable; command.Parameters.Add(parameter); 
+56
May 2 '12 at 7:49 AM
source share

I tried this and got an exception:

The table type parameter "@MyDataType" must have a valid type name.

I had to set the TypeName property for SqlParameter:

 parameter.TypeName = "MyDataType"; 
+9
Apr 08 '14 at 21:30
source share

This question is a duplicate of How to pass table value parameters to a stored procedure from .net code . See this question for an example illustrating the use of either a DataTable or an IEnumerable<SqlDataRecord> .

0
May 28 '12 at 5:16
source share

You can prefix with 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( ); } 
-3
Apr 30 '14 at 12:46 on
source share



All Articles