Passare il parametro con valori di tabella usando ADO.Net

Come passare il parametro con valori di tabella alla stored procedure utilizzando ADO.Net?

  1. Crea tipo in SQL Server :

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

     CREATE PROCEDURE [dbo].[MyProcedure] ( @myData As [dbo].[MyDataType] Readonly ) AS BEGIN SELECT * FROM @myData END 
  3. Crea 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); 
  4. Crea un parametro SQL :

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

Ho provato questo e ho ricevuto l’eccezione:

Il parametro del tipo di tabella ‘@MyDataType’ deve avere un nome di tipo valido.

Ho dovuto impostare la proprietà “TypeName” dello SqlParameter:

 parameter.TypeName = "MyDataType"; 

Questa domanda è un duplicato di Come passare i parametri del valore della tabella alla stored procedure dal codice .net . Si prega di vedere quella domanda per un esempio che illustra l’uso di un DataTable o IEnumerable .

È ansible il prefisso con 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( ); }