SQL参数编辑
本文关键字:编辑 参数 SQL | 更新日期: 2023-09-27 18:02:58
我终于解决了一个问题,但现在我有另一个。我发现了如何获得我的选择器所在的当前字段的名称,但是现在当我想使用更新命令时,它们不会让我设置参数。这里有一些代码…
private void dgv_DataLookup_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
DialogResult dr;
dr = MessageBox.Show("Are you sure you want to edit this field?", "Edit Cell", MessageBoxButtons.YesNo);
if (dr == DialogResult.Yes)
{
string myCell = dgv_DataLookup.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString();
string myIndex = dgv_DataLookup.CurrentCell.OwningRow.Cells[6].Value.ToString();
string myColumn = dgv_DataLookup.CurrentCell.OwningColumn.HeaderCell.Value.ToString();
myColumn.Trim();
da.UpdateCommand = new OleDbCommand("UPDATE tbl_Orders SET @myColumn = @myCell WHERE oid = @myIndex", cs);
da.UpdateCommand.Parameters.Add("@myColumn", OleDbType.VarChar).Value = myColumn;
da.UpdateCommand.Parameters.Add("@myCell", OleDbType.VarChar).Value = myCell;
da.UpdateCommand.Parameters.Add("@myIndex", OleDbType.Integer).Value = myIndex;
cs_Execute("UPDATE");
}
}
当我改变myColumn为实际列,说itemNum,它工作得很好。然而,错误是不能更新'@myColumn';字段不可更新
我也有一个消息框显示我的myColumn的值,它是正确的值。我只是想知道这是否合法,将一个参数设置为另一个参数。如果没有,那么我就必须更新所有的行。谢谢!
注。cd_Execute就像cs.Open() da.UpdateCommand.ExecuteNonQuery() cs.Close()
不能在参数化查询中使用动态列名。您将需要使用动态SQL。
这将做你想要的,尽管打开SQL注入:
da.UpdateCommand = new OleDbCommand(string.Format("UPDATE tbl_Orders SET {0} = @myCell WHERE oid = @myIndex", myColumn), cs);