0

我有一个我意识到的非常基本的问题,我试图在选定的索引更改时从 DropDownList 的选定值返回一个字符串值,但由于某种或其他原因它没有发生。

protected void drpMinisters_SelectedIndexChanged(object sender, EventArgs e)
{
    name = drpMinisters.SelectedValue;
    LabMessage.Text = name;

}

当我尝试将名称添加到数据库时,我得到一个 NullReferenceException。

protected void butSubmitMinister_Click(object sender, EventArgs e)
{
    int index = drpMinisters.SelectedIndex;
    if (index == 0)
    {
        LabMessage.Text = "Please select a minister";
        return;
    }
    try
    {
        OleDbCommand cmd = conn.CreateCommand();
        cmd.CommandText = @"INSERT INTO MinisterTable(MinisterName)VALUES(" + name + "')";
        cmd.ExecuteNonQuery();

        LabMessage.Text = "The record was successfully added";
        conn.Close();
    }
    catch (Exception ex)
    {
        LabMessage.Text = ex.ToString();
    }


}

建议也许。

4

2 回答 2

2

我假设你在这条线上得到了NullRefernceException你的连接对象:conn

OleDbCommand cmd = conn.CreateCommand();

请记住,所有对象(也是您的name变量)都在当前页面生命周期结束时处理。您可以使用控件的 ViewState 跨回发维护值,SelectedValue您的DropDownList.

您还应该在使用它的地方创建连接,并始终在完成后立即处理它,最好使用using-statement。否则,只要它仍然打开,其他线程(请求)就需要创建一个新的物理连接:

string sql = "INSERT INTO MinisterTable(MinisterName) VALUES(@MinisterName);";
using(var con = new OleDbConnection(connectionString))
using(var cmd = new OleDbCommand(sql, con))
{
    cmd.Parameters.AddWithValue("@MinisterName", drpMinisters.SelectedValue);
    con.Open();
    cmd.ExecuteNonQuery();
}
于 2012-11-30T09:09:03.887 回答
0

好吧,我认为您的问题不在于数据库部分,它实际上在于您如何从下拉列表中获取所选值。如果要获取实际出现在下拉列表中的字符串值,则应使用以下 .

string name= (string)drpMinisters.SelectedItem;

如果您想要组合框文本区域中的文本,请使用 SelectedText 属性

于 2012-11-30T09:28:18.527 回答