SqlBulkCopy在数据库中插入两次行

时间:2013-05-16 08:45:32

标签: c# .net sql-server

如果有人能帮我解决这个问题。我正在使用 GridView 从用户那里获取输入,然后创建 DataTable 以使用SQLBulkCopy更新sql数据库。
如果我插入2行,DataTable显示行数= 2,但是当它插入时,数据库中有4行,即我插入的两行重复。
这是我的代码。

protected void btnSaveConsumers_Click(object sender, EventArgs e)
{
    BindConsumerViewState();
    trans.SetConsumerDetails((DataTable)ViewState["Consumers"], Convert.ToInt32(ddlLTPole.SelectedValue));
}


protected void BindConsumerViewState()
{
    //Update Consumer View State
    if (grdConsumers.Rows.Count > 0)
    {
        //only one row in gridview
        if (grdConsumers.Rows.Count == 1)
        {
            DataTable dtCurrentTable = (DataTable)ViewState["InitialTable"];
            DataRow drCurrentRow = null;
            drCurrentRow = dtCurrentTable.NewRow();

            //extract the TextBox values
            for (int j = 0; j < 19; j++)
            {
                    TextBox box = (TextBox)grdConsumers.Rows[0].Cells[j].FindControl("TextBox" + j);
                    dtCurrentTable.Rows[0]["Column" + j] = box.Text;
            }
            ViewState["Consumers"] = dtCurrentTable;
        }
        else
        {
            //having multiple row in gridview
            if (ViewState["Consumers"] != null)
            {
                int rowIndex = 0;

                DataTable dtCurrentTable = (DataTable)ViewState["Consumers"];
                DataRow drCurrentRow = null;
                if (dtCurrentTable.Rows.Count > 0)
                {
                    for (int i = 1; i <= dtCurrentTable.Rows.Count; i++)
                    {
                        //extract the TextBox values
                        for (int j = 0; j < 19; j++)
                        {
                            TextBox box = (TextBox)grdConsumers.Rows[rowIndex].Cells[j].FindControl("TextBox" + j);
                            dtCurrentTable.Rows[i - 1]["Column" + j] = box.Text;
                        }

                        drCurrentRow = dtCurrentTable.NewRow();
                        rowIndex++;
                    }
                    dtCurrentTable.Rows.Add(drCurrentRow);

                    //If Row is empty
                    if (dtCurrentTable.Rows[dtCurrentTable.Rows.Count - 1].IsNull(0) == true)
                    {
                        dtCurrentTable.Rows[dtCurrentTable.Rows.Count - 1].Delete();
                    }

                    ViewState["Consumers"] = dtCurrentTable;
                }
            }
        }
    }
}

public void SetConsumerDetails(DataTable dt, int ltId)
{
    try
    {
        con.Open();
        using (SqlBulkCopy sbc = new SqlBulkCopy(con))
        {
            sbc.DestinationTableName = "ConsumerDetails";

            //add another column for LT in data table
            DataColumn dc = new DataColumn("lt_Id", typeof(int));
            dc.DefaultValue = ltId;
            dt.Columns.Add(dc);

            // Map the Source Column from DataTable to the Destination Columns in Database
            sbc.ColumnMappings.Add("Column0", "ConsumerId");
            sbc.ColumnMappings.Add("Column1", "ConsumerName");
            sbc.ColumnMappings.Add("Column2", "HouseRef");
            sbc.ColumnMappings.Add("Column3", "Latitude");
            sbc.ColumnMappings.Add("Column4", "Longitude");
            sbc.ColumnMappings.Add("Column5", "Phone");
            sbc.ColumnMappings.Add("Column6", "Address");
            sbc.ColumnMappings.Add("Column7", "Purpose");
            sbc.ColumnMappings.Add("Column8", "PNo");
            sbc.ColumnMappings.Add("Column9", "GNo");
            sbc.ColumnMappings.Add("Column10", "MeterCondition");
            sbc.ColumnMappings.Add("Column11", "CFL");
            sbc.ColumnMappings.Add("Column12", "Fan");
            sbc.ColumnMappings.Add("Column13", "Fridge");
            sbc.ColumnMappings.Add("Column14", "TubeLight");
            sbc.ColumnMappings.Add("Column15", "Mixer");
            sbc.ColumnMappings.Add("Column16", "TV");
            sbc.ColumnMappings.Add("Column17", "AC");
            sbc.ColumnMappings.Add("Column18", "Other");
            sbc.ColumnMappings.Add("lt_Id", "LT_Id");

            // Finally write to server
            sbc.WriteToServer(dt);
            sbc.Close();
        }
        con.Close();
    }
    catch
    {
    }
}

0 个答案:

没有答案