如果有人能帮我解决这个问题。我正在使用 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
{
}
}