In this article, we will learn how to pass DataTable from C# to a Stored Procedure in SQL Server.
Basic steps
Now let's take a step by step example
Step 1: Create a Table Employee
Step 2: Create a Table Type
Step 3: Create a Stored Procedure that would take Table Type as parameter that we created in previous step.
Step 4: ADO.Net Code passing DataTable to the TableType Parameter in Stored Procedure
Basic steps
- Create a Table Type with the structure as same of the DataTable in SQL Server
- Make this Table Type as Input Parameter of Stored Procedure
- Finally, pass the DataTable to the Table Type Parameter of the Stored Procedure
Note: This is supported on SQL Server 2008 onward.
Now let's take a step by step example
Step 1: Create a Table Employee
CREATE TABLE Employee( EmpID VARCHAR(10) , EmpName VARCHAR(50) , Gender CHAR(1) , DOJ DATETIME )
Step 2: Create a Table Type
CREATE TYPE EmpTableType AS TABLE ( EmpID VARCHAR(10) , EmpName VARCHAR(50) , Gender CHAR(1) , DOJ DATETIME )
Step 3: Create a Stored Procedure that would take Table Type as parameter that we created in previous step.
CREATE PROCEDURE usp_GetEmpDetils( @EmpDet EmpTableType READONLY ) AS BEGIN INSERT INTO Employee SELECT * FROM @EmpDet SELECT * FROM Employee END
Step 4: ADO.Net Code passing DataTable to the TableType Parameter in Stored Procedure
DataTable EmpTable = new DataTable();
EmpTable.Columns.Add("EmpID");
EmpTable.Columns.Add("EmpName");
EmpTable.Columns.Add("Gender");
EmpTable.Columns.Add("DOJ");
DataRow EmpRow = EmpTable.NewRow();
EmpRow["EmpID"] = "EMP0001";
EmpRow["EmpName"] = "Sandeep Mittal";
EmpRow["Gender"] = "M";
EmpRow["DOJ"] = "01/01/2010";
EmpTable.Rows.Add(EmpRow);
EmpTable.AcceptChanges();
SqlConnection connection = new SqlConnection("data source=ServerName;database=DBName;uid=UserID;pwd=Password");
SqlCommand selectCommand = new SqlCommand("usp_GetEmpDetils", connection);
selectCommand.CommandType = CommandType.StoredProcedure;
SqlParameter tvpParam = selectCommand.Parameters.AddWithValue("@EmpDet", EmpTable);
tvpParam.SqlDbType = SqlDbType.Structured;
connection.Open();
grid.DataSource = selectCommand.ExecuteReader();
grid.DataBind();
connection.Close();
No comments:
Write Comments