Wednesday, September 16, 2015

Read Csv File and Upload To database

protected void Upload(object sender, EventArgs e)
    {
        if (FileUpload1.HasFile)
        {
            FileInfo fileInfo = new FileInfo(FileUpload1.PostedFile.FileName);
            if (fileInfo.Name.Contains(".csv"))
            {
                string fileName = fileInfo.Name.Replace(".csv", "").ToString();
                string csvFilePath = Server.MapPath("UploadedCSVFiles") + "\\" + fileInfo.Name;
                //Save the CSV file in the Server inside 'UploadedCSVFiles'   
                FileUpload1.SaveAs(csvFilePath);
                //Fetch the location of CSV file   
                string filePath = Server.MapPath("UploadedCSVFiles") + "\\";
                string strSql = "SELECT * FROM [" + fileInfo.Name + "]";
                string strCsvConnString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePath + ";" + "Extended Properties='text;HDR=YES;'";
                // load the data from CSV to DataTable   
                DataTable dtCsv = new DataTable();
                using (OleDbDataAdapter adapter = new OleDbDataAdapter(strSql, strCsvConnString))
                {
                    adapter.FillSchema(dtCsv, SchemaType.Mapped);
                    adapter.Fill(dtCsv);
                }

                //master foramt csv
                string filePathMaster = Server.MapPath("UploadedCSVFiles") + "\\";
                string csvFilePathMaster = Server.MapPath("UploadedCSVFiles") + "\\Master-getdysonca-orderimport-format.csv";
                string strSqlMaster = "SELECT * FROM [Master-getdysonca-orderimport-format.csv]";
                string strCsvConnStringMaster = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePathMaster + ";" + "Extended Properties='text;HDR=YES;'";
                // load the data from CSV to DataTable   
                DataTable dtCsvMaster = new DataTable();
                using (OleDbDataAdapter adapter = new OleDbDataAdapter(strSqlMaster, strCsvConnStringMaster))
                {
                    adapter.FillSchema(dtCsvMaster, SchemaType.Mapped);
                    adapter.Fill(dtCsvMaster);
                }

                string uploadedFileHeaderString = ConvertHeaderToString(csvFilePath);
                string formatOfUploadedFileHeaderString = ConvertHeaderToString(csvFilePathMaster);
//check template 
                if (uploadedFileHeaderString != formatOfUploadedFileHeaderString)
                {
                    lblmsg.Text = "Template of csv file is different.";
                }
                else
                {
                    foreach (DataRow row in dtCsv.Rows)
                    {
                        object eMail = row["EMAIL"];
                        //check those field which cannot be blank 
                        if (eMail == DBNull.Value || row["PRODUCT01"] == DBNull.Value || row["BILL_ADDRESS1"] == DBNull.Value || row["BILL_CITY"] == DBNull.Value || row["BILL_STATE"] == DBNull.Value || row["BILL_ZIPCODE"] == DBNull.Value
                            || row["SHIP_TO_ADDRESS1"] == DBNull.Value || row["SHIP_TO_CITY"] == DBNull.Value || row["SHIP_TO_STATE"] == DBNull.Value || row["ORDER_NUMBER"] == DBNull.Value || row["ORDER_DATE"] == DBNull.Value)
                        {
                            lblmsg.Text = "Email, Product, Billing address, Shipping Address, Order Number, Order Date field(s) cannot be blank.";

                        }
                        else
                        {
                            var dt = dtCsv;
                            var rowNo=dtCsv.Rows.Count;
                            if (rowNo > 0)
                            {
                                string errMsg = "";
                                int purchaseID = 0;
                                List<int> list = new List<int>();
                                string consString = ConfigurationManager.ConnectionStrings["ecommerceConnectionString"].ToString();
                                using (SqlConnection con = new SqlConnection(consString))
                                {
                                    using (SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(con))
                                    {
                                        //Set the database table name
                                        sqlBulkCopy.DestinationTableName = "dbo.ImportedRawData";
                                        con.Open();
                                        sqlBulkCopy.WriteToServer(dt);
                                        con.Close();
                                    }

                                    int campaignID = Convert.ToInt32(ConfigurationManager.AppSettings["CampaignID"]);
                                    using (var cmd = con.CreateCommand())
                                    {
                                        con.Open();
                                        cmd.CommandText = "[dbo].[ImportDataFromCSV]";
                                        cmd.CommandType = CommandType.StoredProcedure;
                                        cmd.Parameters.Add(new SqlParameter("CampaignID", campaignID));
                                        cmd.Parameters.Add(new SqlParameter("FileName", fileInfo.Name));
                                        
                                        using (var reader = cmd.ExecuteReader())
                                        {
                                            if (reader.HasRows)
                                            {

                                                    //var result = reader[0];

                                                    while (reader.Read())
                                                    {
                                                        if (Convert.ToString(reader["ErrMsg"]) == "BLANK")
                                                        {
                                                        //purchaseID = Convert.ToInt32(reader["ImportedPurchaseID"]);
                                                        // errMsg = Convert.ToString(reader["ErrMsg"]);
                                                        list.Add(Convert.ToInt32(reader["ID"]));
                                                        }

                                                        else
                                                            list.Add(Convert.ToInt32(reader["ErrMsg"]));
                                                    }
                                                //purchaseID = Convert.ToInt32(list[0]);
                                                //errMsg = list[1].ToString();
                                            }
                                        }
                                        con.Close();
                                    }
                                    for (int j = 0; j < list.Count() ; j++)
                                    {
                                        purchaseID = Convert.ToInt32(list[j]);
                                        ImportedPurchase importedPurchase = InsertDataIntoImportedPurchase(purchaseID);

                                        //send mail
                                        new PaymentModule().MailRichConfirmationForImport(importedPurchase);
                                    }
                                }

                                if (errMsg == "")
                                {
                                    lblmsg.Text = string.Format("({0}) records has been loaded to the table.", rowNo, fileName);
                                }
                                else
                                    lblmsg.Text = errMsg;
                            }
                            else
                            {
                                lblmsg.Text = "File is empty.";
                            }
                        }

                    }

                }
            }
            else
            {
                lblmsg.Text = "Upload csv file only.";
            }
        }
    }

    public string ConvertHeaderToString(string fileNameWithPath)
    {
        //bool firstLineOfChunk = true;
        string columnData = null;
        bool firstLineOfFile = true;
        using (var sr = new StreamReader(fileNameWithPath))
        {
            string line = null;

            while ((line = sr.ReadLine()) != null)
            {
                if (firstLineOfFile)
                {
                    columnData = line;
                    firstLineOfFile = false;
                    continue;
                }
            }
        }
        return columnData;
    }


    public bool CompareDataTable(DataTable t1, DataTable t2)
    {
        if (t1.Rows.Count != t2.Rows.Count)
            return false;

        foreach (DataColumn dc in t1.Columns)
        {
            for (int i = 0; i < t1.Rows.Count; i++)
            {
                if (t1.Rows[i][dc.ColumnName] != t2.Rows[i][dc.ColumnName])
                {
                    return false;
                }
            }
        }
        return true;
    }

No comments:

Post a Comment