从数据库添加到下拉列表时出错

Error adding from database to dropdownlist

我有一个面板,仅当单击 GridView 中的“编辑”按钮时才可见。

在该面板中有一个带有 DropDownListTextBox 的表格,您可以在其中输入一个数字并将其添加到 ListBox

在所有想要的数字都添加到 ListBox 之后,当我单击 Finalize 按钮时,正在将数据添加到数据库中。在 Gridview 中,我将名称从数据库连接起来,因为我分别有姓氏和名字。

为了更简单,当我单击具有特定 ID 的“编辑”按钮时,我选择从 DropDownList 中的数据库添加。

单击“编辑”按钮时显示此错误:

Operation is not valid due to the current state of the object.

在我添加 DropDownList 的行中。我验证了我的数据库的名称,我的 table 都是正确的。我什至只尝试使用 firstname ,而不是 concatenate ,它也有同样的错误。我不知道出了什么问题。我希望你能帮助我。这是出现错误的代码。

protected void btnEditSO_Click(object sender, EventArgs e)
{
    panelSO.Visible = true;
    btnFinalizeSO.Text = " Update ";

    Button but = (Button)sender;
    GridViewRow grid = (GridViewRow)but.NamingContainer;

    string select_sql_SOddl = "SELECT ID, (LASTNAMER | | ' ' | | FIRSTNAMER ) AS REFERENTNAME FROM REFERENT_SHIPPING WHERE ID=" + grid.Cells[14].Text;

    using (OracleConnection con = new OracleConnection(ConfigurationManager.ConnectionStrings["DBCS"].ToString()))
    {
        con.Open();

        OracleCommand cmd1 = new OracleCommand(select_sql_SOddl, con);

        OracleDataReader dr1 = cmd1.ExecuteReader();

        while (dr1.Read())
        {
            ddlReferentShip.Items.Add(dr[0].ToString());
         // ddlReferentShip.Items.Add(dr["REFERENTNAME"].ToString());
         //   ddlReferentShip.DataSource = dr1;
        //    ddlReferentShip.DataTextField = dr1["REFERENTNAME"].ToString();
        //    ddlReferentShip.DataValueField = dr1["ID"].ToString();               
        //    ddlReferentShip.DataBind();
        }

    }

}

当你有 dr1 作为数据读取器时,为什么你从 dr 设置 ddl 项目。

也许你可以试试这个:

protected void btnEditSO_Click(object sender, EventArgs e)
{
    panelSO.Visible = true;
    btnFinalizeSO.Text = " Update ";

    Button but = (Button)sender;
    GridViewRow grid = (GridViewRow)but.NamingContainer;

    string select_sql_SOddl = "SELECT ID, (LASTNAMER | | ' ' | | FIRSTNAMER ) AS REFERENTNAME FROM REFERENT_SHIPPING WHERE ID=" + grid.Cells[14].Text;


    using (OracleConnection con = new OracleConnection(ConfigurationManager.ConnectionStrings["DBCS"].ToString()))
    {
        con.Open();
        OracleCommand cmd = new OracleCommand(select_sql_SO, con);
        OracleCommand cmd1 = new OracleCommand(select_sql_SOddl, con);
        OracleDataReader dr = cmd.ExecuteReader();
        OracleDataReader dr1 = cmd1.ExecuteReader();

        int i=0;
        while (dr1.Read())
        {
            ddlReferentShip.Items.Add(dr1[1].ToString());
            i++;
         // ddlReferentShip.Items.Add(dr["REFERENTNAME"].ToString());
         //   ddlReferentShip.DataSource = dr1;
        //    ddlReferentShip.DataTextField = dr1["REFERENTNAME"].ToString();
        //    ddlReferentShip.DataValueField = dr1["ID"].ToString();               
        //    ddlReferentShip.DataBind();
        }

    }

}

您正在检查dr1.Read()

和阅读dr[0].Tostring()

另外尝试在添加数据之前清除列表。那么索引应该是1如果你需要显示名称

应该是

 while (dr1.Read())
        {
            ddlReferentShip.Items.Add(dr1[1].ToString());

        }

我猜在您作为 .Text

传递的查询中 ID 是数字

试试这个

string select_sql_SOddl = "SELECT ID, (LASTNAMER | | ' ' | | FIRSTNAMER ) AS REFERENTNAME 
FROM REFERENT_SHIPPING WHERE ID=" + Convert.ToInt32(grid.Cells[14].Text);

也所有方法都尝试使用参数化查询来避免SQL INJECTION