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です。そうしないと、他のスレッド (リクエスト) は、これがまだ開いているときはいつでも新しい物理接続を作成する必要があります。

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 に答える