我有一个gridview,它连接到一个数据源从那里获取值。我创建了一个selectedindexchanged函数,当click被单击时工作。它显示ID,orderID,From,To和Price值并打开面板,其中有4个文本框和如果用户想要更改这些值,则下拉列表。在此之前一切正常。当用户更改某些值并单击时,不提交数据库中的任何更改。我使用id获取值; “string id = orderGrid.SelectedRow.Cells [1] .Text;”
这是我的提交按钮代码;
protected void submitButton_Click(object sender, EventArgs e)
{
string id = orderGrid.SelectedRow.Cells[1].Text;
OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("db.mdb") + ";Persist Security Info=False");
string query = "update ordersTable set orderID=@testID,fromLocation=@from,toLocation=@to,price=@price WHERE ID = @id ";
OleDbCommand cmd = new OleDbCommand(query, con);
cmd.Parameters.AddWithValue("@id", id);
cmd.Parameters.AddWithValue("@testID", orderBox.Text);
cmd.Parameters.AddWithValue("@from", fromText.Text);
cmd.Parameters.AddWithValue("@to", toList.SelectedItem.Text);
cmd.Parameters.AddWithValue("@price", priceBox.Text);
try
{
con.Open();
cmd.ExecuteNonQuery();
con.Close();
Response.Write("Edit Complete !");
}
catch (Exception ex)
{
Response.Write("Error : " + ex);
}
orderGrid.DataBind();
}
id string在我的selectedindexchanged函数中运行得非常好。
答案 0 :(得分:1)
在OleDb参数中,它们的位置不是通过名称来识别的
您的参数占位符 @ID 是查询中的最后一个,但您将其添加为集合中的第一个。
这导致您的WHERE条件完全错误
(您搜索ID等于priceBox内容的记录)
只需移动ID的插入作为最后一个参数
cmd.Parameters.AddWithValue("@testID", orderBox.Text);
cmd.Parameters.AddWithValue("@from", fromText.Text);
cmd.Parameters.AddWithValue("@to", toList.SelectedItem.Text);
cmd.Parameters.AddWithValue("@price", priceBox.Text);
cmd.Parameters.AddWithValue("@id", id);
这是主要问题,但我可以看到另一个因使用AddWithValue而导致的问题。这是一个方便的捷径,但有时它会让你付出代价 在您的情况下,您将 @price 参数传递给字符串,如果您的 price 字段是小数(应该是),那么数据库引擎将尝试转换从字符串到小数,如果小数分隔符不相同,则在数据库中以错误的值结束。更好地检查priceBox中的值并将其自己转换为小数。