在ASP.NET中更新gridview时出现问题

时间:2011-03-07 12:32:03

标签: c# .net asp.net gridview

我有一个gridview'GridViewMcm',在第一列和第二列中编辑下拉列表,在下两列中编辑文本框.DialId是表的主键。

以下是Onrowupdating事件的代码。

SqlConnection mySQLconnection = new SqlConnection(con);
mySQLconnection.Open(); 
DropDownList drdList1, drdlist2;
drdList1 = (DropDownList)(GridViewMcm.Rows[e.RowIndex].Cells[0].FindControl("ddeditfrom"));
drdlist2 = (DropDownList)(GridViewMcm.Rows[e.RowIndex].Cells[1].FindControl("ddeditto"));
TextBox txtrate, txtdesc;
txtrate = (TextBox)(GridViewMcm.Rows[e.RowIndex].Cells[2].FindControl("txteditrate"));
txtdesc = (TextBox)(GridViewMcm.Rows[e.RowIndex].Cells[3].FindControl("txteditdesc"));
SqlCommand strupdate = new SqlCommand("Update mcmtable set Measure1FromSymbol = @Measure1FromSymbol, Measure2ToSymbol = @Measure2ToSymbol, ConversionRate = @ConversionRate, ConversionDesc = @ConversionDesc Where MeasurePairId=@PairId", mySQLconnection);
strupdate.Parameters.Add("@Measure1FromSymbol", SqlDbType.Text).Value = drdList1.SelectedValue;
strupdate.Parameters.Add("@Measure2ToSymbol", SqlDbType.Text).Value = drdlist2.SelectedValue;
strupdate.Parameters.Add("@ConversionRate", SqlDbType.Decimal).Value = decimal.Parse(txtrate.Text);
strupdate.Parameters.Add("@ConversionDesc", SqlDbType.Text).Value = txtdesc.Text;
strupdate.Parameters.Add("@PairId", SqlDbType.Int).Value = Convert.ToInt32(GridViewMcm.DataKeys[e.RowIndex].Values[0].ToString());
strupdate.ExecuteNonQuery();
GridViewMcm.EditIndex = -1;       

以下是执行上述代码时出现的错误:

  

“违反UNIQUE KEY约束   “U_mcmtable”。无法插入重复   键入对象'mcmtable'。该   声明已被终止。“

我发现问题是dropdownlist值'drdlist1.SelectedValue'和'drdlist2.SelectedValue'无法获取下拉列表中的selectedvalue但是获取了一些默认值。并且由于它们提取的默认值已经作为特定行中的组合出现在表中,因此它会抛出错误。上面的代码部分有错误吗?

3 个答案:

答案 0 :(得分:1)

检查数据库中的U_mcmtable约束。我的猜测是,为from和to字段设置了约束,并且您尝试更新为已经在表中的转换组合。

答案 1 :(得分:0)

该错误表示您尝试在列名[Name]中插入重复值 已在该列上设置了唯一约束,这意味着该列中的值 应该是独一无二的

您可以通过

获取mcmtable表上所有约束的列表
SELECT * FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
where Table_Name='mcmtable'

答案 2 :(得分:0)

检查您尝试在受影响的表中插入/更新的数据。验证表中是否已存在您尝试插入/更新的数据,这些数据可能导致UNIQUE KEY约束失败。