Introduction
This article describes how to pass table as parameter in stored procedure from c# using ADO.NET.
Getting Started
SQL Server Stored Procedures support System.Data.DataTable as a parameter. We can pass the DataTable to the Stored Procedure using ADO.Net in the same way as we provided using the System.Data.SqlParameter class, but needs a few changes in the datatype.
Normally we mentions DbType in SqlParameter class for a normal parameter like varchar, nvarchar, int and so on as in the following code.
SqlParameter sqlParam= new SqlParameter();
sqlParam.ParameterName = "@StudentName";
sqlParam.DbType = DbType.String;
sqlParam.Value = StudentName;
Pass User defined Table type to Stored Procedure C#
But in the case of a Table parameter, we do not need to provide a DbType as the parameter data type. We need to provide SqlType rather then DbType.
Example
SqlParameter Parameter = new SqlParameter;
Parameter.ParameterName = "@PhoneBook";
Parameter.SqlDbType = SqlDbType.Structured;
Parameter.Value = PhoneTable;
Pass User defined Table type to Stored Procedure C#
The following example receives a list of phone books and stores them in a database using ADO.Net. The example retrieves the phone book details from the list and stores them into the DataTable and passes this table to the Stored Procedure named NewPhoneBook as a parameter.
//Phone book list
List<PhoneBook> PhoneBooks
//CReating Table
DataTable PhoneTable = new DataTable();
// Adding Columns
DataColumn COLUMN=new DataColumn();
COLUMN.ColumnName="ID";
COLUMN.DataType= typeof(int);
PhoneTable.Columns.Add(COLUMN);
COLUMN = new DataColumn();
COLUMN.ColumnName = "ContactNumber";
COLUMN.DataType = typeof(string);
PhoneTable.Columns.Add(COLUMN);
COLUMN = new DataColumn();
COLUMN.ColumnName = "ContactName";
COLUMN.DataType = typeof(string);
PhoneTable.Columns.Add(COLUMN);
// INSERTING DATA
foreach (UserPhoneBook UPB in PhoneBooks)
{
DataRow DR = PhoneTable.NewRow();
DR[0] = UPB.UserName;
DR[1] = UPB.ContactNumber;
DR[2] = UPB.ContactName;
PhoneTable.Rows.Add(DR);
}
//Parameter declaration
SqlParameter[] Parameter = new SqlParameter[2];
Parameter[0].ParameterName = "@PhoneBook";
Parameter[0].SqlDbType = SqlDbType.Structured;
Parameter[0].Value = PhoneTable;
Parameter[1].ParameterName = "@Return_Value";
Parameter[1].Direction = ParameterDirection.ReturnValue;
//Executing Procedure
SqlHelper.ExecuteNonQuery(this.ConnectionString, CommandType.StoredProcedure, "[NewPhoneBook]", Parameter);
Pass User defined Table type to Stored Procedure C#
Summary
This article saw how to pass Table type to Stored Procedure c# using Ado.net , I hope you have enjoyed it a lot.
Thanks