If we have list of records then we can not process each record to insert into database because it is time taking process and it will degrade the performance.In this case we can use bulk insert. Suppose if we have bulk record in xml then we can easily dump that xml record into database.
Check the below code sample to insert bulk record.
Suppose this is sample XML string -
XML Data String
<?xml version='1.0' encoding='utf-8'?>
<Employees>
<Emp>
<EmpID>101</EmpID>
<EmpName>Jitendra</EmpName>
<Age>27</Age>
</Emp>
<Emp>
<EmpID>102</EmpID>
<EmpName>Ramesh</EmpName>
<Age>30</Age>
</Emp>
<Emp>
<EmpID>103</EmpID>
<EmpName>Raj</EmpName>
<Age>24</Age>
</Emp>
</Employees>
Now check the below stored procedure –
Stored Procedure
This stored proceduer will take the XML string as input and it will process this XML to insert into table.
--Stored procedure to insert bulk record using XML
CREATE PROCEDURE [dbo].[SP_EmpBulkInsert]
( @XMLData text )
AS
BEGIN
SET NOCOUNT ON
BEGIN TRANSACTION
Begin Try
DECLARE @XMLDocPointer INT
EXEC sp_xml_preparedocument @XMLDocPointer OUTPUT, @XMLData
INSERT INTO tab_Employees
(EmpID, EmpName, Age)
SELECT EmpID,EmpName,Age
FROM OPENXML(@XMLDocPointer,'/Employees/Emp',2)
WITH (EmpID INT,EmpName nvarchar(50),Age INT)
EXEC sp_xml_removedocument @XMLDocPointer
COMMIT TRANSACTION
Return 0;
End Try
Begin Catch
ROLLBACK TRANSACTION
End Catch
END
In this stored procedure I am inserting data into tab_Employees table, based on column selection data will be inserted to this table. Now chek the below code to call this stored procedure from C# application.
C# Code-
//Code to insert bulk records
private void btnBulkInsert_Click(object sender, EventArgs e)
{
try
{
//Code to insert bulk record using XML
string strConnectionString = "Your connection string";
//Getting XML string
string strXML = GetXMLString();
//Connecting to database
using (System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection())
{
conn.ConnectionString = Convert.ToString(strConnectionString);
System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand("SP_EmpBulkInsert", conn);
cmd.Parameters.AddWithValue("@XMLData", strXML);
cmd.CommandType = CommandType.StoredProcedure;
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
MessageBox.Show("Records inserted successfully.");
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
//XML string to insert bulk record
private string GetXMLString()
{
return @"<?xml version='1.0' encoding='utf-8'?>
<Employees>
<Emp>
<EmpID>101</EmpID>
<EmpName>Jitendra</EmpName>
<Age>27</Age>
</Emp>
<Emp>
<EmpID>102</EmpID>
<EmpName>Ramesh</EmpName>
<Age>30</Age>
</Emp>
<Emp>
<EmpID>103</EmpID>
<EmpName>Raj</EmpName>
<Age>24</Age>
</Emp>
</Employees>";
}
In above code, I am getting XML string using GetXMLString() method. After getting the XML string I am passing this string as parameter for stored procedure. Finally when this code will be executed then you will find the new records in tab_Employees table.
Check the below code sample to insert bulk record.
Suppose this is sample XML string -
XML Data String
<?xml version='1.0' encoding='utf-8'?>
<Employees>
<Emp>
<EmpID>101</EmpID>
<EmpName>Jitendra</EmpName>
<Age>27</Age>
</Emp>
<Emp>
<EmpID>102</EmpID>
<EmpName>Ramesh</EmpName>
<Age>30</Age>
</Emp>
<Emp>
<EmpID>103</EmpID>
<EmpName>Raj</EmpName>
<Age>24</Age>
</Emp>
</Employees>
Stored Procedure
This stored proceduer will take the XML string as input and it will process this XML to insert into table.
--Stored procedure to insert bulk record using XML
CREATE PROCEDURE [dbo].[SP_EmpBulkInsert]
( @XMLData text )
AS
BEGIN
SET NOCOUNT ON
BEGIN TRANSACTION
Begin Try
DECLARE @XMLDocPointer INT
EXEC sp_xml_preparedocument @XMLDocPointer OUTPUT, @XMLData
INSERT INTO tab_Employees
(EmpID, EmpName, Age)
SELECT EmpID,EmpName,Age
FROM OPENXML(@XMLDocPointer,'/Employees/Emp',2)
WITH (EmpID INT,EmpName nvarchar(50),Age INT)
EXEC sp_xml_removedocument @XMLDocPointer
COMMIT TRANSACTION
Return 0;
End Try
Begin Catch
ROLLBACK TRANSACTION
End Catch
END
In this stored procedure I am inserting data into tab_Employees table, based on column selection data will be inserted to this table. Now chek the below code to call this stored procedure from C# application.
C# Code-
//Code to insert bulk records
private void btnBulkInsert_Click(object sender, EventArgs e)
{
try
{
//Code to insert bulk record using XML
string strConnectionString = "Your connection string";
//Getting XML string
string strXML = GetXMLString();
//Connecting to database
using (System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection())
{
conn.ConnectionString = Convert.ToString(strConnectionString);
System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand("SP_EmpBulkInsert", conn);
cmd.Parameters.AddWithValue("@XMLData", strXML);
cmd.CommandType = CommandType.StoredProcedure;
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
MessageBox.Show("Records inserted successfully.");
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
//XML string to insert bulk record
private string GetXMLString()
{
return @"<?xml version='1.0' encoding='utf-8'?>
<Employees>
<Emp>
<EmpID>101</EmpID>
<EmpName>Jitendra</EmpName>
<Age>27</Age>
</Emp>
<Emp>
<EmpID>102</EmpID>
<EmpName>Ramesh</EmpName>
<Age>30</Age>
</Emp>
<Emp>
<EmpID>103</EmpID>
<EmpName>Raj</EmpName>
<Age>24</Age>
</Emp>
</Employees>";
}
In above code, I am getting XML string using GetXMLString() method. After getting the XML string I am passing this string as parameter for stored procedure. Finally when this code will be executed then you will find the new records in tab_Employees table.
Good But Every Developer Cant Want From XML He Needs From EXCEL Sheet
ReplyDeleteYes Shaik, You r right.
DeleteActually there are so many ways for bulk insert. Like-
Using XML
Using SQLBulkCopy
Using UserDefineTypes
Using Dataset
Using concatenation of insert query string
Out of these ways I have explained using XML.