我的 WPF 應用程式中有一個資料網格。在其中一列中,我有一個 int(列名 = Amount)。
例如,單元格中會有一個數字“4”。我可以將 DataGrid 中的“4”編輯為“3”。
編輯后,我將按下“更新”按鈕,以便更新我的資料庫列Amount。
它正在作業,但它將列Amount中的所有單元格更新為所選行的 ID 號。
這是我在 xaml.cs 檔案中的代碼:
private void Update(object sender, RoutedEventArgs e)
{
DataRowView o = (DataRowView)g2.SelectedItem;
int Amount = Convert.ToInt32(o.Row.ItemArray[0]);
try
{
const string query = @"UPDATE [Stock] SET [STOCK].Amount = @Aantal;";
using (SqlConnection con = new SqlConnection("Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFilename=\"...."))
using (SqlCommand cmd = new SqlCommand(query, con))
{
cmd.Parameters.Add("@Amount", SqlDbType.Int).Value = Amount;
con.Open();
cmd.ExecuteNonQuery();
}
MessageBox.Show("Update complete");
binddatagrid();
}
catch (Exception ex)
{
MessageBox.Show("Error occurred:\r\n" ex.Message);
}
}
我究竟做錯了什么?
uj5u.com熱心網友回復:
您的資料庫查詢正在更新表Amount中每一行的[Stock]列。您需要WHERE在資料庫查詢中添加一個子句,以便僅更新[Stock]資料庫中與DataGrid.
我不知道您的資料庫架構是什么樣的,但我假設該[Stock]表有一Id列。如果是這樣,查詢可能如下所示:
UPDATE [Stock] SET [Stock].Amount = @Anatal WHERE [Stock].Id = @Id
請注意,查詢現在有第二個引數@Id。這意味著您需要以Id與當前獲取Amount.
int id = Convert.ToInt32(o.Row.ItemArray[1]);
我使用了o.Row.ItemArray[1],但我不知道Id實際將存盤在哪個索引處。您必須使用該索引才能獲得正確的Id.
由于您的查詢有第二個引數,您還需要將其添加到實體的Parameters集合中SqlCommand。就像你如何處理Amount.
cmd.Parameters.Add("@Id", SqlDbType.Int).Value = id;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/381120.html
