ویدئو های پربازدید سایت

ذخیره اطلاعات Excell در دیتابیس SQL + فایل پروژه

در این پست قصد داریم تا به کمک به اپلیکیشن ویندوزی با سی شارپ اطلاعات یک فایل اکسل را در دیتابیس قرار دهیم :

برای این نرم افزار نیاز داریم تا یک پروژه ویندزوی سی شارپ به صورت زیر ایجاد کنیم :

انتقال اطلاعات از Excell به SQL,sql,excell,اس کیو ال,اکسل,وارد کردن اکسل در sql,کپی داده ها از اکسل به دیتابیس,دیتابیس

برای باتن ایجاد شده کد های زیر را می نویسیم :

 

private void Button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog ope = new OpenFileDialog
            {
                Filter = "Excel Files|*.xls;*.xlsx;*.xlsm"
            };
            if (ope.ShowDialog()==DialogResult.Cancel)
            {
                return;
            }
            FileStream stream = new FileStream(ope.FileName,FileMode.Open);
            IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream);
            DataSet result = excelReader.AsDataSet();
            DataTable firstTable = result.Tables[0];
            firstTable.Rows[0].Delete();
            System.IO.StringWriter writer = new System.IO.StringWriter();
            firstTable.WriteXml(writer, XmlWriteMode.WriteSchema, false);
            string res = writer.ToString();
            DataTable checkData = new DataTable();
            checkData = CheckXml(res);
            if (checkData.Rows.Count>0)
            {
                lblDuplication.Text = "داده تکراری وجود دارد، امکان ذخیره دیتابیس وجود ندارد";
            }
            else
            {
                try
                {
                    using (SqlConnection con = new SqlConnection(@"[Your SQL Connection String]"))
                                    {
                                        using (SqlCommand cmd = new SqlCommand("InsertXML"))
                                        {
                                            cmd.Connection = con;
                                            cmd.CommandType = CommandType.StoredProcedure;
                                            cmd.Parameters.AddWithValue("@xml", res);
                                            con.Open();
                                            cmd.ExecuteNonQuery();
                                            con.Close();
                                        }
                                    }
                                    lblDuplication.Text = "اطلاعات با موفقیت ذخیره شدند";
                }
                catch (Exception)
                {
                    lblDuplication.Text = "یک خطا در نرم افزار روی داده است";
                }
                
            }

        }


 

همچنین در کدهای بالا از تابعی به نام CheckXml استفاده کردیم کردیم که کد اون به این صورت خواهد بود :

 

private DataTable CheckXml(string xml)
        {
            DataSet ds = new DataSet();
            DataTable dt = new DataTable();
            using (SqlConnection con = new SqlConnection(@"Your SQL Connection String"))
            {
                using (SqlCommand cmd = new SqlCommand("CheckXML"))
                {
                    cmd.Connection = con;
                    cmd.CommandType = CommandType.StoredProcedure;
                    cmd.Parameters.AddWithValue("@xml", xml);
                    con.Open();
                    SqlDataAdapter sda = new SqlDataAdapter
                    {
                        SelectCommand = cmd
                    };
                    sda.Fill(dt);
                    con.Close();
                    return dt;
                }
            }
        }

 

بعد از اجرای کد های بالا نیاز داریم تا پروسیجر افزودن داده های Xml را به دیتابیس ایجاد کنیم

که ابتدا من قصد دارم داده های تکراری رو بررسی کنم 

کد Sql پایین رو اجرا کنید :


USE [HypersourceTestDB]   
go   
SET ansi_nulls ON   
go   
SET quoted_identifier ON   
go   
create PROCEDURE [dbo].[Checkxml] @xml XML   
AS   
  BEGIN   
      SET nocount ON;   
  
      CREATE TABLE #temp11   
        (   
           test_id      NCHAR(10),   
           test_name    VARCHAR(50),   
           test_surname VARCHAR(50),   
           test_age     INT   
        )   
  
      INSERT INTO #temp11   
      SELECT customer.value('(Column1/text())[1]', 'nchar(10)')   AS test_id,   
             customer.value('(Column2/text())[1]', 'varchar(50)') AS test_name,   
             customer.value('(Column3/text())[1]', 'varchar(50)') AS   
             test_surname,   
             customer.value('(Column4/text())[1]', 'int')         AS test_age   
      FROM   @xml.nodes('/NewDataSet/Sheet1')AS TEMPTABLE(customer)   
  
      SELECT *   
      INTO   #temp1   
      FROM   (SELECT *   
              FROM   #temp11   
              UNION ALL   
              SELECT *   
              FROM   test1) AS temp   
  
      SELECT *   
      INTO   #temp2   
      FROM   (SELECT Row_number()   
                       OVER(   
                         partition BY test_id, test_name, test_surname, test_age   
                         ORDER BY test_id) AS rownum,   
                     *   
              FROM   #temp1) AS temp   
  
      SELECT *   
      FROM   #temp2   
      WHERE  rownum > 1   
  END   
--   
-- select * from test1  

 

بعد این کد ها الان باید دستور افزودن دیتا ها داحل دیتابیس رو بنویسیم :



SET ansi_nulls ON   
go   
SET quoted_identifier ON   
go   
ALTER PROCEDURE [dbo].[Insertxml] @xml XML   
AS   
  BEGIN   
      SET nocount ON;   
  
      INSERT INTO test1   
      SELECT customer.value('(Column1/text())[1]', 'nchar(10)')   AS test_id,   
             customer.value('(Column2/text())[1]', 'varchar(50)') AS test_name,   
             customer.value('(Column3/text())[1]', 'varchar(50)') AS   
             test_surname,   
             customer.value('(Column4/text())[1]', 'int')         AS test_age   
      FROM   @xml.nodes('/NewDataSet/Sheet1')AS TEMPTABLE(customer)   
  END   

همچنین کل فایل ها و پروژه ها ضمیمه این آموزش هستند و میتوانید از اینجا پروژه را دانلود کنید

دانلود پروژه

حجم فایل : 3MB

رمز فایل : www.hypersource.ir

 

 

 

در صورتی که سوالی راجع به این آموزش دارید در بخش نظرات همین پست مطرح و از ارسال ان از بخش ارتباط با ما خود داری نمائید


;

ویدئو هایی که شاید بپسندید!

هم اکنون نـــظر بدهید

HyperSourCe.ir

info@hypersource.ir

کلیه حقوق برای وب سایت هایپر سورس محفوظ است
CopyRight ©2014-2019
ارتباط با ما
نام شما
ایمیل
موبایل
آیدی تلگرام
رمز عبور را فراموش کرده ام

چگونه میتوانم این محصول را با تخفیف دریافت نمایم ؟

لطفا منتظر بمانید. . .

پیام سیستم