2011-03-07 52 views
1

更新GridView的我有一個GridView「GridViewMcm」與dropdownlists而在接下來的兩列第一和第二列和文本框進行編輯。PairId是表的主鍵。問題而在ASP.NET

以下是對於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 [email protected]", 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'中插入重複的 密鑰。該 語句已終止。」

我發現這個問題是該下拉列表值‘drdlist1.SelectedValue’和‘drdlist2.SelectedValue’無法獲取在下拉列表中的SelectedValue,但取一些默認值。由於它們提取的默認值已經作爲特定行中的組合存在於表中,所以它會拋出錯誤。上面的代碼部分是否有任何錯誤?

+0

建議一:「ne1能幫我解決嗎?」不是英語。如果你想被認真對待,不要使用那種語言。 – 2011-03-08 01:11:51

+0

好的。感謝您的通知。這類幫助網站的新用戶。 – xyzwwq 2011-03-08 06:33:07

回答

0

檢查您正試圖在受影響的表中插入/更新的數據。驗證您嘗試插入/更新的數據是否已經存在於可能導致UNIQUE KEY約束失敗的表中。

1

檢查U_mcmtable約束我的猜測是約束條件是爲from和to字段設置的,而且你試圖更新到已經在表格中的轉換組合。

+0

感謝您的幫助。問題在於drdList1和drdList2沒有使用SelectedValue填充,而是填充了一些Default值。我的代碼中有錯誤嗎?你能幫助我嗎? – xyzwwq 2011-03-08 06:45:04

0

這個錯誤表示您要插入的列名重複的值[名稱] 的唯一約束已設置該列這就意味着該列中的值 應該是唯一的

你可以得到您的mcmtable表上的所有約束列表由

SELECT * FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS 
where Table_Name='mcmtable'