Introduction : It is a common requirement in a website to have the ability to send an email to the organization via a contact form. Depending on the organization, they may need this information saved to a database or sent directly to a pre defined email account where this information will be processed. This article will illustrate the basics of retrieving the information from the contact page to an XML file, using the XML file to perform an insert into database table, and then transform the XML to the required format for sending to a specified account.
- Create the table like
create table tbl_xml_emp
(Eno int not null,
Ename varchar(50)not null,
Designation varchar(50),
salary money,
Deptno int)
- The real logic to saving this file is processed inside the SQL Stored Proc. There is a lot that is actually going on in this stored proc. First of all, we need to convert the text passed in the Incoming Parameter to an In Memory XML file. We achieve this by using the system stored Procedure sp_xml_preparedocument and pass it @xmlstr as an input, and @hDoc as an output which returns a reference to the XMLDocument.
Write a Store procedure to insert bulk record into Database
set ANSI_NULLS ONset QUOTED_IDENTIFIER ONGOALTER procedure [dbo].[xmlToEmp](@xmlstr ntext)as
begin declare @hDoc int exec sp_xml_preparedocument @hDoc OUTPUT,@xmlstr
insert into tbl_xml_Emp
select xml.Eid,xml.Ename,xml.Designation,xml.Salary,xml.Deptno
from OPENXML(@hDoc,'/Employees/Employee',2) with(Eid int, Ename varchar(50) 'Name', Designation varchar(50) , Salary money, Deptno int 'DeptNo')xmlexec sp_xml_removedocument @hDoc
end
- You could pass this parameter through as Char, Varchar, nVarchar, or nText. It makes no difference other than limitation on the size of the document you wish to pass through
Write the following code in button click event.
string connStr = ConfigurationManager.ConnectionStrings["myConnectionString"].ConnectionString;
DataSet ds = new DataSet();
ds.ReadXml(Server.MapPath("XML_Files/Employee.xml"));
string strxml = XDocument.Load(Server.MapPath("XML_Files/Employee.xml")).ToString();
SqlConnection sqlconn = new SqlConnection(connStr);
SqlCommand sqlcmd = new SqlCommand();
sqlcmd.Connection = sqlconn;
sqlcmd.CommandType = CommandType.StoredProcedure;
sqlcmd.CommandText = "xmlToEmp";
sqlcmd.Parameters.AddWithValue("@xmlstr", strxml);
sqlconn.Open();
sqlcmd.ExecuteNonQuery();
sqlconn.Close();
- XML File is
<?xml version="1.0" encoding="utf-8"?><Employees>
<Employee >
<Eid>1001</Eid> <Name>AAA</Name> <Designation>Software Devoloper</Designation> <Salary>20000</Salary> <DeptNo>10</DeptNo> </Employee>
<Employee >
<Eid>1002</Eid> <Name>BBB</Name> <Designation>Software Devoloper</Designation> <Salary>30000</Salary> <DeptNo>20</DeptNo> </Employee>
<Employee >
<Eid>1003</Eid> <Name>CCC</Name> <Designation>Software Devoloper</Designation> <Salary>20000</Salary> <DeptNo>10</DeptNo> </Employee>
</Employees>
- Format your XML to look like
<Employee >
<Eid>1001</Eid>
<Name>BBB</Name>
<Designation>Software Devoloper</Designation>
<Salary>30000</Salary>
<DeptNo>20</DeptNo>
</Employee>
did you notice how <Employee> element have the column as children and each column value is a node text not an attribute.
Then you will need to use "2" in the OPENXML function call
from OPENXML(@hDoc,'/Employees/Employee',2)
- <Employee Eid="1001" Name="BBB" Designation="Software Devoloper" Salary="30000" DeptNo="20"> </Employee>
No change required for the OPENXML function call it remains 1)
No comments:
Post a Comment