ثبت اطلاعات در پایگاه داده توسط فایل XML در ASP.NET

در این مقاله به بررسی نحوه درج حجم بالایی از اطلاعات درون پایگاه داده با استفاده از فایل XML در ASP.NET میپردازیم.

ثبت  اطلاعات در پایگاه داده توسط فایل XML در ASP.NET

از SQL Server 2005 به بعد ما می توانیم پارامتری از نوع داده XML به سمت Stored Procedure ارسال کنیم و همچنین به راحتی می توانیم فایل XML را تجزیه کنیم و صفات و مقادیر تگ های آن را استخراج کنیم.

در اینجا میخواهیم عملیات درج حجم بالایی از اطلاعات را درون پایگاه داده با استفاده از فایل XML انجام دهیم.

پایگاه داده:

در ابتدای کار یک پایگاه داده ساده با نام CustomerDetails که شامل فیلدهای موجود در تصویر زیر باشد طراحی میکنم.

کدهای HTML مربوط به برنامه:

کدهای HTML مربوطه حاوی یک کنترل FileUpload و یک Button برای بارگذاری فایل XML می شود.

 

asp:FileUpload ID="FileUpload1" runat="server" />
    <asp:Button ID="Button1" Text="آپلود فایل XML" runat="server" OnClick="UploadXML" />

 

فضاهای نام مورد نیاز:

شما باید فضاهای نام زیر را به برنامه اضافه نمایید.


using System.IO;
using System.Data;
using System.Configuration;
using System.Data.SqlClient;

 

فایل XML :

در کدهای XML زیر مشاهده می کنید که این فایل شامل اطلاعات مشتریان هستند. اطلاعات به عنوان صفت درون تگ ها ذخیره شده اند.

<?xml version="1.0" standalone="yes"?>
<Customers>
  <Customer Id ="1">
    <Name>زهرا چگینی</Name>
    <Country>تهران</Country>
  </Customer>
  <Customer Id = "2">
    <Name>نرگس محمدی</Name>
    <Country>تفرش</Country>
  </Customer>
    <Customer Id ="3">
    <Name>علی تمیمیs</Name>
    <Country>قم</Country>
  </Customer>
    <Customer Id ="4">
    <Name>احسان حسینی</Name>
    <Country>شیراز</Country>
  </Customer>
</Customers>

 

Stored Procedure برای تعریف اطلاعات XML:

دستورات Stored Procedure زیر یک پارامتر از نوع XML (که از سمت دستورات ارسال شده اند) را دریافت می کند. این شیء XML تعریف شده است و صفت و مقادیر تگ ها استخراج شده اند و درون جدول درج می شوند.

تابع nodهای نوع داده XML از XQuery expression برای بیرون کشیدن nod های XML از XML استفاده می کند. برای این کار ما نیاز داریم تا Customer nod ها را استخراج کنیم. در /Customers/Customer می توان گفت که Customers به عنوان nod پدر و Customer به عنوان nod فرزند شناخته می شود.

به محض اینکه nod ها نمایش داده شدند، ما نیاز داریم که صفات و مقادیر متنی داخلی را استخراج کنیم. برای نمایش مقادیر متنی داخلی بین تگ هاف نیاز داریم که از توابع مقادیر استفاده کنیم.

توابع مقدار یا (values function) می توانند صفات بهتر از متن های داخلی بخوانند.

صفات:

برای خواندن صفات ما نیاز داریم تا نام صفاتی که با @ مشخص شده اند و یک نوع داده هستند را ارسال کنیم. در این مثال id صفات با استفاده از ('Customer.value('@Id', 'INT نمایش داده می شود.

متن داخلی:

برای نمایش متن داخلی ما نیاز داریم تا نام تگ را ارسال کنیم. متن داخلی تگ XML با استفاده از تابع text نمایش داده می شود و همچنین ما از Index دوم که باید به عنوان مقدار اولیه نمایش داده شود استفاده کینم.

در پایان مقادیر داخل جدول CustomerDetails ذخیره می شوند.


CREATE PROCEDURE [dbo].[InsertXML]
@xml XML
AS
BEGIN
      SET NOCOUNT ON;
 
      INSERT INTO CustomerDetails
      SELECT
      Customer.value('@Id','INT') AS Id, --ATTRIBUTE
      Customer.value('(Name/text())[1]','VARCHAR(100)') AS Name, --TAG
      Customer.value('(Country/text())[1]','VARCHAR(100)') AS Country --TAG
      FROM
      @xml.nodes('/Customers/Customer')AS TEMPTABLE(Customer)
END

 

زمانی که دکمه آپلود فایل انتخاب شد، فایل XML آپلود می شود و در نهایت در یک پوشه ذخیره می شود، فایلی که خوانده شده و رشته XML که به عنوان پارامتر به Stored Procedure که در فایل XML درج شده است، ارسال می شود، در جدول CustomerDetails ذخیره می شود.


protected void UploadXML(object sender, EventArgs e)
{
    string fileName = Path.GetFileName(FileUpload1.PostedFile.FileName);
    string filePath = Server.MapPath("~/Uploads/") + fileName;
    FileUpload1.SaveAs(filePath);
    string xml = File.ReadAllText(filePath);
    string constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
    using (SqlConnection con = new SqlConnection(constr))
    {
        using (SqlCommand cmd = new SqlCommand("InsertXML"))
        {
            cmd.Connection = con;
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.AddWithValue("@xml", xml);
            con.Open();
            cmd.ExecuteNonQuery();
            con.Close();
        }
    }
}

خروجی حاصل از اجرای برنامه:

 

فایل های ضمیمه