Редактирование SQL по параметру - PullRequest
0 голосов
/ 20 июля 2011

Я наконец-то решил одну проблему, но теперь у меня есть другая.Я узнал, как получить имя текущего поля, в котором включен мой селектор, но теперь, когда я хочу использовать для него команду обновления, они не позволят мне установить параметр.Вот какой-то код ...

    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, и это было правильное значение.Мне просто интересно, если это было законно, установка параметра для параметра.Если нет, то мне просто нужно обновить все строки.Спасибо!

ps cd_Execute похож на cs.Open () da.UpdateCommand.ExecuteNonQuery () cs.Close ()

1 Ответ

1 голос
/ 20 июля 2011

Вы не можете иметь динамические имена столбцов в параметризованных запросах. Вам нужно будет прибегнуть к динамическому SQL .

Это будет делать то, что вы хотите, хотя открыто для SQL-инъекции :

da.UpdateCommand = new OleDbCommand(string.Format("UPDATE tbl_Orders SET {0} = @myCell WHERE oid = @myIndex", myColumn), cs);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...