ASP.NET C#如果忽略了else?

时间:2017-10-04 18:58:26

标签: c# sql asp.net

我一直在摸我的头两个多小时。我似乎无法弄明白。

基本上,当我点击选择投标人按钮时,我所做的是“获胜者”显示在状态下。问题是当我选择底部选择投标人按钮然后激活它上面的按钮。 if else决定显示错误消息“无法选择获胜者。错误原因:您已经选择了获胜者”。被忽略并继续在状态字段上写“Winner”。

如果我尝试以其他方式执行此操作,则会显示错误消息。选择第一行中的按钮将状态设置为获胜者然后选择第二行按钮将告诉我我不能选择获胜者,因为我已经选择了其他人。

我的C#代码:

dir = smbConn.connectTree('C$')
smbConn.openFile(dir,  '/picture.jpg')

我的HTML代码:

protected void rptrBindBidders_ItemCommand(object source, RepeaterCommandEventArgs e)
{
    if (e.CommandName == "Winner" && e.CommandArgument.ToString() != "")
    {
        Int64 onsaleID = Convert.ToInt64(Request.QueryString["saleID"]);

        String CS = ConfigurationManager.ConnectionStrings["DatabaseSQLConnectionString1"].ConnectionString;
        using (SqlConnection con = new SqlConnection(CS))
        {
            using (SqlCommand cmd1 = new SqlCommand("select * from Bidders where saleID=" + onsaleID + " ", con))
            {
                SqlDataAdapter sda = new SqlDataAdapter(cmd1);
                DataTable dt = new DataTable();
                sda.Fill(dt);

                string BidderStatus = dt.Rows[0]["BidderStatus"].ToString().Trim();

                if (BidderStatus == "Winner")
                {
                    lblmessage.ForeColor = Color.Red;
                    lblmessage.Text = "Cannot select winner. Error cause: You have already selected a winner.";
                }

                else
                {
                    using (SqlCommand cmd = new SqlCommand("update Bidders set [BidderStatus]='Winner' where [bidID]='" + e.CommandArgument.ToString() + "'", con))
                    {


                        con.Open();
                        cmd.ExecuteNonQuery();

                        lblmessage.ForeColor = Color.Green;
                        lblmessage.Text = "Success! A bidder has been selected!";


                        con.Close();

                    }
                }

                this.BindBidders();
            }
        }
    }
}
}

2 个答案:

答案 0 :(得分:1)

您是否可以使用SqlDataReader检查您是否直接获胜,而无需填写DataTable

using(var connection = new SqlConnection(cs)
{
    // SELECT 1 because we don't care about the returned data
    using(var cmd = new SqlCommand($"SELECT 1 FROM [Bidders] WHERE saleID={onsaleID} AND BidderStatus='Winner'", connection))
    {
        cmd.CommandType = CommandType.Text;

        using(var reader = cmd.ExecuteReader())
        {
            if(reader.Read())
            {
                // The command returned rows (there is an existing winner for the given `onsaleID`)
            }
            else
            {
                // The command returned no rows.  There is no winner.
            }
        }
    }
}

答案 1 :(得分:0)

您可能会混淆bidId和saleId。我想可以存在许多具有相同saleId和不同BidId的投标人。 基本上,您只是搜索所有投标人,而不是检查第一个投标人的状态。所以你的代码会评估这个" if(BidderStatus ==" Winner")"仅在选择第一项时才为true。将您的选择更改为"选择count(1)",添加where子句以仅选择获胜者,然后检查它是否返回超过0.它应该有效。