繁体   English   中英

需要很长时间才能在SQL Server 2008 R2中插入行

[英]Takes long time to insert rows in SQL Server 2008 R2

我在c#Winforms gridview中有超过200,000条记录,大约需要一个小时才能插入到我的数据库中。 我正在尝试改善此插入的性能。 我希望在5到10分钟内插入所有记录。

我正在使用For循环填充每一行以通过SQL事务插入数据库,我不认为SqlBulkCopy会成功,因为所有200,000条记录都需要在插入数据库之前通过DB进行验证。

     Save-Function:
     if (chkretailprice.Checked)
        {
                    DataTable dt_grid = (DataTable)gcPromotion.DataSource;
                    dt_grid.AcceptChanges();

                    for (int tt = 0; tt < gvPromotion.RowCount; tt++)
                    {
                        gvPromotion.FocusedRowHandle = tt;
                        double dRGridMinus = Convert.ToDouble(gvPromotion.GetRowCellValue(tt, gvPromotion.Columns["PromotionalRetailPrice"]));
                        string sItem = Convert.ToString(gvPromotion.GetRowCellValue(tt, gvPromotion.Columns["ItemName"]).ToString());
                        string sPack = Convert.ToString(gvPromotion.GetRowCellValue(tt, gvPromotion.Columns["Package"]).ToString());

                        if (dRGridMinus < 0)
                        {
                            gvPromotion.FocusedRowHandle = tt;
                            MessageBoxInfo("Promotional RetailPrice contains Negative Values for this ItemName-'" + sItem + "' & Package-'" + sPack + "'");
                            gvPromotion.Focus();
                            return;
                        }
                    }
                    int iReCount = dt_grid.Select("PromotionalRetailPrice='0.00'").Length;

                    if (iReCount != 0)
                    {
                        MessageBoxInfo("Promotional RetailPrice Must not be 0");
                        gvPromotion.Focus();
                        return;
                    }
       }
      if (rgPromotion.Checked)
         {
                        for (int p = 0; p < gvPromotion.RowCount; p++)
                        {
                            string[] sbranchArr = sBranchIDs.Split(',');
                            for (int pp = 0; pp < sbranchArr.Length; pp++)
                            {
                                objProEntity.PromotionMasterId = objProEntity.PromotionMasterId;
                                objProEntity.BranchId = Convert.ToInt32(sbranchArr[pp]);//gvPromotion.GetRowCellValue(p, gvPromotion.Columns["BranchID"]));
                                objProEntity.ItemId = Convert.ToInt64(gvPromotion.GetRowCellValue(p, gvPromotion.Columns["ItemID"]));
                                objProEntity.PackId = Convert.ToInt32(gvPromotion.GetRowCellValue(p, gvPromotion.Columns["PackTypeID"]));
                                objProEntity.PromotionValueType = Convert.ToString(gvPromotion.GetRowCellValue(p, gvPromotion.Columns["PromotionValueType"]));
                                objProEntity.PromotionValue = Convert.ToString(gvPromotion.GetRowCellValue(p, gvPromotion.Columns["PromotionValue"]));

                                if (chkretailprice.Checked && chkwholesaleprice.Checked)// when both retailprice & wholesaleprice checkbox is checked
                                {
                                    objProEntity.ActualRetailPrice = Convert.ToDecimal(gvPromotion.GetRowCellValue(p, gvPromotion.Columns["ActualRetailPrice"]));
                                    objProEntity.PromoRetailPrice = Convert.ToDecimal(gvPromotion.GetRowCellValue(p, gvPromotion.Columns["PromotionalRetailPrice"]));
                                    objProEntity.ActualWholeSalePrice = Convert.ToDecimal(gvPromotion.GetRowCellValue(p, gvPromotion.Columns["ActualWholeSalePrice"]));
                                    objProEntity.PromoWholesalePrice = Convert.ToDecimal(gvPromotion.GetRowCellValue(p, gvPromotion.Columns["PromotionalWholeSalePrice"]));
                                }
                                else if (chkretailprice.Checked)// when retailprice checkbox is checked
                                {

                                    objProEntity.ActualRetailPrice = Convert.ToDecimal(gvPromotion.GetRowCellValue(p, gvPromotion.Columns["ActualRetailPrice"]));
                                    objProEntity.PromoRetailPrice = Convert.ToDecimal(gvPromotion.GetRowCellValue(p, gvPromotion.Columns["PromotionalRetailPrice"]));
                                    objProEntity.ActualWholeSalePrice = Convert.ToDecimal(gvPromotion.GetRowCellValue(p, gvPromotion.Columns["ActualWholeSalePrice"]));
                                    objProEntity.PromoWholesalePrice = Convert.ToDecimal(0);
                                }
                                else if (chkwholesaleprice.Checked)// when wholesaleprice checkbox is checked
                                {
                                    objProEntity.ActualRetailPrice = Convert.ToDecimal(gvPromotion.GetRowCellValue(p, gvPromotion.Columns["ActualRetailPrice"]));
                                    objProEntity.PromoRetailPrice = Convert.ToDecimal(0);
                                    objProEntity.ActualWholeSalePrice = Convert.ToDecimal(gvPromotion.GetRowCellValue(p, gvPromotion.Columns["ActualWholeSalePrice"]));
                                    objProEntity.PromoWholesalePrice = Convert.ToDecimal(gvPromotion.GetRowCellValue(p, gvPromotion.Columns["PromotionalWholeSalePrice"]));
                                }
                                objProEntity.DiscountAllowed = Convert.ToBoolean(gvPromotion.GetRowCellValue(p, gvPromotion.Columns["DiscountAllowed"]));

                                DataTable dt_Check = new DataTable();
                                dt_Check = SalesPromotionData.IsCheckItemExists(objProEntity, SQLTrans);                                    
                                if (dt_Check.Rows.Count == 0)
                                {
                                    if (!IsEdit)
                                    {
                                        DataTable dt_child = SalesPromotionData.InsertChildData(objProEntity, SQLTrans); // Insert Child Details when isEdit=false
                                    }
                                    else
                                    {
                                        if (gvPromotion.Columns.Contains(gvPromotion.Columns["PromotionChildId"]))
                                            if ((DBNull.Value.Equals(gvPromotion.GetRowCellValue(p, gvPromotion.Columns["PromotionChildId"]))) || (gvPromotion.GetRowCellValue(p, gvPromotion.Columns["PromotionChildId"]) == "") || Convert.ToString(gvPromotion.GetRowCellValue(p, gvPromotion.Columns["PromotionChildId"]).ToString()) == "0")
                                            {
                                                objProEntity.PromotionMasterId = masterid;
                                                SalesPromotionData.InsertChildData(objProEntity, SQLTrans);// insert child details when isEdit=true
                                            }
                                            else
                                            {
                                                objProEntity.PromotionChildId = Convert.ToInt64(gvPromotion.GetRowCellValue(p, gvPromotion.Columns["PromotionChildId"]).ToString());
                                                SalesPromotionData.UpdateChildDetails(objProEntity, SQLTrans); // update child details when isEdit=true
                                            }
                                        else
                                        {
                                            objProEntity.PromotionMasterId = masterid;
                                            SalesPromotionData.InsertChildData(objProEntity, SQLTrans);// insert child details when isEdit=true
                                        }
                                    }
                                }
                            }
                        }
    }

通常,您可以通过将数据批量插入[一个]工作表中来将数据分段存储到数据库中,而无需参照完整性或任何东西-只需原始数据加上您可能需要的任何[非唯一]索引即可。 一旦上演了,您可以:

  • 根据数据库验证工作表中的数据,并
  • 将其应用于相关的“实际”表格。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM