c# - SQL参数编辑

标签 c# mysql sql visual-studio-2010 ado.net

我终于解决了一个问题,但现在我有另一个问题。我找到了如何获取选择器所在的当前字段的名称,但现在当我想对其使用更新命令时,他们不会让我设置参数。这是一些代码...

    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()

最佳答案

参数化查询中不能使用动态列名称。您需要求助于dynamic SQL .

这将做你想做的事,尽管开放到 SQL Injection :

da.UpdateCommand = new OleDbCommand(string.Format("UPDATE tbl_Orders SET {0} = @myCell WHERE oid = @myIndex", myColumn), cs);

关于c# - SQL参数编辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6763074/

相关文章:

c# - 在 NSOutlineView 中显示某些项目的上下文菜单

c# - 浮点到 int 而不转换为 int

c# - 如何从 Startup.cs 中写入日志?

c# - 以编程方式检查 MySQL 状态是否正确?

sql - 如何在 mssql 的事务中强制刷新全文索引?

c# - Wcf数据服务投影及查询方法

java - 我的程序出现错误

python - 使用 python 将许多变量附加到 MySQL

java - com.microsoft.sqlserver.jdbc.SQLServerException : The result set has no current row

php - 通过另一个表过滤重复项