0

我正在使用 Oracle 10g 快捷版。

根据表中存在的值,动态生成一组单选按钮和文本框。

我想要的是当用户选择一个单选按钮并单击删除按钮时,单选按钮前面的文本字段中存在的值被捕获在一个字符串变量中,然后这个值在数据库中的表中被删除。

这就是我生成单选按钮和文本框的方式:

foreach (DataRow dr in dsData.Tables[0].Rows){

    TextBox txt_task = new TextBox();
    txt_task.Enabled = false;
    txt_task.Text = " " + dr[0].ToString();
    txt_task.Width = 300;
    txt_task.ID = "dynamictask" + counter.ToString();

    RadioButton chk_delete = new RadioButton();
    chk_delete.Enabled = true;
    chk_delete.GroupName = "del_grp";
    chk_delete.ID = "dynamicrdio" + counter.ToString();

    dynamic_controls_holder.Controls.Add(chk_delete);
    dynamic_controls_holder.Controls.Add(new LiteralControl("   "));
    dynamic_controls_holder.Controls.Add(txt_task);
    dynamic_controls_holder.Controls.Add(new LiteralControl("<br />"));

    //The inital value of counter was 0.
    counter+=1;
}

这就是我尝试执行删除操作的方式:

for (int counter = 0; counter <= rows_count; counter++){
    string dynamic_rdio_finder = "dynamicrdio" + counter.ToString();
    string dt = "dynamictask" + counter.ToString();
    RadioButton temp_rdio = (RadioButton)dynamic_controls_holder.FindControl(dynamic_rdio_finder);
    if (temp_rdio.Checked){
        TextBox temp_task = (TextBox)dynamic_controls_holder.FindControl(dt);
        temp_task_txt = temp_task.Text;
        break;
    }
}

connection.Open();
OracleCommand command = new OracleCommand("DELETE FROM tbl_mark6_task WHERE description_task=:description_task", connection);
command.Parameters.AddWithValue("description_task", temp_task_txt);
rows_count = command.ExecuteNonQuery();
command.Parameters.Clear();

if (rows_count == 1){
    lbl_notification.Text = "Task was deleted successfully.";
}
else if (rows_count != 1){
    lbl_error.Text = "Task was not deleted!";
}

这是行不通的。我似乎无法找到问题所在。

4

1 回答 1

1

您需要在事务边界中使用它并且需要显式提交它。更多信息可以在这个链接中找到

另请注意,OracleCommand现在已弃用。它将在下一个版本中删除。

OracleTransaction transaction;
command.Transaction = transaction;
....
command.ExecuteNonQuery();
transaction.Commit();
于 2013-10-06T15:34:34.743 回答