0

asp.net Webページに、ページロード時にAccessデータベースのブール列の値を読み取るようにコーディングしたボタンがあり、列の値がtrueかfalseかに応じてボタンの動作が変わります。

基本的に、このボタンは製品の表示/非表示ボタンです(クリックして製品を非表示にするか、すでに非表示になっている場合はクリックして表示します)。

製品が非表示になっているときに、クリックして製品を表示する(データベースを更新する)などの奇妙な動作が発生しますが、非表示にすると機能せず、一方が機能するのにもう一方が機能しない理由がわかりません。 。

コードは次のとおりです。

 if (!IsPostBack)

    try
    {
        s = WebConfigurationManager.ConnectionStrings["LNDatabase"].ConnectionString;
        conn = new OleDbConnection(s);
        cmd = new OleDbCommand("SELECT * FROM products WHERE products.prod_id = @test", conn);
        OleDbParameter test = new OleDbParameter("@test", OleDbType.Integer);
        test.Value = Request.QueryString["prod_id"];
        cmd.Parameters.Add(test);

        conn.Open();
        dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
        dr.Read();
        title.Text = dr["shortdesc"].ToString();
        description.Text = dr["longdesc"].ToString();
        price.Text = dr["price"].ToString();

        productcat = dr["cat"].ToString();
        product_live = dr["live"].ToString();


    }
    catch (Exception ex)
    {
        Response.Write(ex.Message.ToString());
    }
    finally
    {
        dr.Close();
        conn.Close();
    }

protected void Page_Load(object sender, EventArgs e)

if (!IsPostBack)
    {
        bool prod_live_bool = Convert.ToBoolean(product_live);

        if (prod_live_bool == true)
        {
            live_label.Text = "This product is visible to customers";
            livelabelbutton.Text = "Hide this product";
            livelabelbutton.Click += new EventHandler(this.hideproduct_click);

        }
        else
        {
            live_label.Text = "This product is not visible to customers";
            livelabelbutton.Text = "Make this product visible";
            livelabelbutton.Click += new EventHandler(this.showproduct_click);
        }

    }

 protected void hideproduct_click(object sender, EventArgs e)
{
    string prodid = Request.QueryString["prod_id"];
    s = WebConfigurationManager.ConnectionStrings["LNDatabase"].ConnectionString;
    string str = "UPDATE products SET live = @hide WHERE prod_id=@product";

    using (OleDbConnection conn = new OleDbConnection(s))
    {
        using (OleDbCommand cmd = new OleDbCommand(str, conn))
        {
            OleDbCommand mycommand = new OleDbCommand();

            OleDbParameter hideparam = new OleDbParameter("@hide", OleDbType.Boolean);
            hideparam.Value = false;
            cmd.Parameters.Add(hideparam);
            OleDbParameter product = new OleDbParameter("@product", OleDbType.VarChar);
            product.Value = prodid;
            cmd.Parameters.Add(product);

            conn.Open();
            cmd.ExecuteNonQuery();
        }
    }
    Response.Redirect(Request.RawUrl);
}

protected void showproduct_click(object sender, EventArgs e)
{
    string prodid = Request.QueryString["prod_id"];

    s = WebConfigurationManager.ConnectionStrings["LNDatabase"].ConnectionString;
    string str = "UPDATE products SET live = @show WHERE prod_id=@product";

    using (OleDbConnection conn = new OleDbConnection(s))
    {
        using (OleDbCommand cmd = new OleDbCommand(str, conn))
        {
            OleDbCommand mycommand = new OleDbCommand();

            OleDbParameter hideparam = new OleDbParameter("@show", OleDbType.Boolean);
            hideparam.Value = true;
            cmd.Parameters.Add(hideparam);
            OleDbParameter product = new OleDbParameter("@product", OleDbType.VarChar);
            product.Value = prodid;
            cmd.Parameters.Add(product);

            conn.Open();
            cmd.ExecuteNonQuery();
        }
    }
    Response.Redirect(Request.RawUrl);
}

長いコードでごめんなさい。

4

1 に答える 1

2

コマンドボタンのポイントが[はい/いいえ]フィールドの値を切り替えることである場合は[live]、dbエンジンに必要な処理を実行させます。

UPDATE products SET live = (Not live) WHERE prod_id=@product

Notブール値の逆を返します。したがって、をNot True返します。したがって、ステートメントは、を実行する前に含まれていたものの逆に設定されます。アクセスセッションで新しいクエリとして試して、どのように動作するかを調べてください。FalseNot FalseTrueUPDATEliveUPDATE

それで十分であれば、非表示と表示に別々のルーチンは必要ありません。

于 2013-01-17T17:51:12.990 に答える