ASP.NET C#是否忽略了else?

ASP.NET C#是否忽略了else?,c#,sql,asp.net,C#,Sql,Asp.net,我挠头已经两个多小时了。我只是想不通 基本上我所做的就是当我点击选择投标人按钮时,在状态下显示“获胜者”。问题是当我选择底部的“选择投标人”按钮,然后激活上面的按钮时。显示错误消息“无法选择赢家。错误原因:您已经选择了赢家”的if else决策被忽略,并继续在状态字段中写入“赢家” 如果我尝试以其他方式执行,则会显示错误消息。选择第一行的按钮将状态设置为winner,然后选择第二行按钮将告诉我无法选择赢家,因为我已经选择了其他人 我的C代码: protected void rptrBindBid

我挠头已经两个多小时了。我只是想不通

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

如果我尝试以其他方式执行,则会显示错误消息。选择第一行的按钮将状态设置为winner,然后选择第二行按钮将告诉我无法选择赢家,因为我已经选择了其他人

我的C代码:

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();
            }
        }
    }
}
}
我的HTML代码:

<asp:Repeater ID="rptrBindBidders" onItemCommand="rptrBindBidders_ItemCommand" runat="server">
        <HeaderTemplate>
   <table class="table">
       <thead>
           <tr>
               <th>Bidders</th>
               <th>Date bidded</th>
               <th>Price Offer</th>
               <th>Status</th>
           </tr>
       </thead>
            <tbody>
        </HeaderTemplate>

        <ItemTemplate>
                <tr>
                    <td><%# Eval("BidderName") %></td>
                    <td><%#Eval("DateBidded") %></td>
                    <td>₱<%# Eval("bidPrice") %></td>
                    <td><%# Eval("BidderStatus") %></td>
                    <td><asp:Button ID="btnSelectBuyer" runat="server" Text="Select Bidder" CommandName="Winner" CommandArgument='<%#Eval("bidID") %>'/></td>
                    <!--<asp:HiddenField ID="hfbidID" Value='' runat="server" />-->
                    <!--<asp:HiddenField ID="hfBidderName" Value='' runat="server" />-->
                </tr>
        </ItemTemplate>

        <FooterTemplate>
            </tbody>
   </table>
        </FooterTemplate>
</asp:Repeater>

投标人
投标日期
报价
地位
₱

你可能把bidId和saleId搞混了。我猜可能存在许多具有相同saleId和不同BidId的投标人。
基本上,您只是搜索所有投标人,然后检查第一个投标人的状态。所以,只有在选择了第一项时,代码才会将“if(BidderStatus==”Winner“)”评估为true。将select更改为“select count(1)”,添加where子句以仅选择赢家,然后检查其返回的值是否大于0。它应该可以工作。

您是否可以使用
SqlDataReader
直接检查您是否有赢家,而不必填写
数据表

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.
            }
        }
    }
}

如果从不忽略,
<代码>其他
永远不会被忽略。编译器总是,总是,总是忠实地遵循您给出的指令。在调试器中输入一个断点并逐步检查代码,找出它实际在做什么。将鼠标悬停在变量上或使用“监视”窗口来了解它为什么这样做。了解什么是
BidderStatus
。你不能通过假设来了解你周围的世界;你只能通过外出观察来学习。小心查询中的SQL注入。哇,这是为我做的。谢谢