C# 标签上的加载和

C# 标签上的加载和,c#,mysql,asp.net,C#,Mysql,Asp.net,我正在尝试加载lblPriceToBe上的txtQuantity.Text和lblPice.Text之和..我正在用此代码加载我的lblprice private void GetData() { SqlConnection connection = new SqlConnection("Data Source = localhost\\SQLEXPRESS;Initial Catalog = MejOnlineManagementDB00;Integrated Security=Tru

我正在尝试加载lblPriceToBe上的txtQuantity.Text和lblPice.Text之和..我正在用此代码加载我的lblprice

private void GetData()
{
    SqlConnection connection = new SqlConnection("Data Source = localhost\\SQLEXPRESS;Initial Catalog = MejOnlineManagementDB00;Integrated Security=True;");
    connection.Open();
    SqlCommand sqlCmd = new SqlCommand(@"SELECT price,productType
                                        FROM Products3
                                        WHERE productName='" + DropDownList1.SelectedItem.Value.ToString() + "'", connection);
    SqlDataReader rdr = sqlCmd.ExecuteReader();
    if (rdr.HasRows)
    {
        while (rdr.Read())
        {
            lblPrice.Text = rdr.GetValue(0).ToString(); //  if price is  string use GetString(0))
            lblProdType.Text = rdr.GetValue(1).ToString();
        }
    }
    connection.Close();
    //DropDownList End of Area
}
在我得到mysql数据库的价格后,我将其乘以txtQuantity

protected void btnCalculate_Click(object sender, EventArgs e)
{
    double Quantity = Convert.ToDouble(txtQuantity.Text);
    double Price = Convert.ToDouble(lblPrice.Text);
    double sum;
    sum = Quantity * Price;
    //Output
    sum = Convert.ToDouble(lblPriceToBe.Text);
}
然后我得到了这个错误

mscorlib.dll中发生“System.FormatException”类型的异常,但未在用户代码中处理

其他信息:输入字符串的格式不正确

关于这一点:

sum = Convert.ToDouble(lblPriceToBe.Text);

这意味着
lblPriceToBe.Text
中的值不能转换为双精度。它可以是空的,也可以是我们无法转换为double的任何其他值。在这种特殊情况下,将帮助您确定输入是否可转换,如果转换成功,还将提供转换结果(否则将为0.0);所以你想做的是:

protected void btnCalculate_Click(object sender, EventArgs e)
{
    double Quantity,Price,sum;
    bool canProcess=true;
    if(!double.TryParse(txtQuantity.Text,out Quantity)
    {
      // conversion failed
      lblPriceToBe.Text="Invalid quantity"
      canProcess=false;
    }
    if(!double.TryParse(lblPriceToBe.Text,out Price)
    {
      // conversion failed
      lblPriceToBe.Text="Invalid Price"
      canProcess=false;
    }
    if(canProcess)
    {
    sum = Quantity * Price;
    //Output
    lblPriceToBe.Text=sum.ToString();
    }

}

在您的Sql/mysql服务器上运行查询,并检查是否返回值(如果确实尝试)

在类的公共上声明这些变量

public double Quantity;
public double Price;
public double Sum;
然后通过查询给出它们的值:

 Quantity = Convert.ToDouble(rdr.GetValue("columns name"));
 Price = Convert.ToDouble(rdr.GetValue("columns name"));
 Sum = Quantity * Price ;

然后在文本框中使用它们

您是否检查了“txtQuantity”的值?这可能就是它失败的原因。如果不确定输入值是否始终正确,也可以尝试使用
double.TryParse()
,该函数使用一个ref值进行更新,如果解析成功,则返回一个布尔值。@pkeuter让我试试。@pkeuter我收到此错误“方法“try Parse”不重载1个参数”。请查看函数的签名。您需要一个额外的参数,因为tryparse返回一个布尔值。请查看@un lucky的答案,他用一段代码给出了相同的答案。这应该可以帮助你:-)它不再给我一个错误。但是我可以问一下为什么答案没有出现在我的lblPriceToBe.Text上吗?你需要将结果分配给
lblPriceToBe.Text
查看更新我尝试了代码。但是答案仍然没有出现在lblPriceToBe.Text上。因此代码工作正常,标签的输入是问题所在,不能转换为双精度。检查该值,因此我应该使用mysql查询,就像我在数据库上获取lblprice时使用的查询一样?如果
rdr.GetValue(“columns name”)
为空会发生什么?它将显示一个错误,但您可以使用条件来检查您将在此处检查多少个条件?对于
null
/
empty
/
包含字符
等等,为了避免这些,我使用了
double.TryParse
通过使用if(Quantity==null | | Price==null | | Sum==null)进行转换null如果双变量为null(通过查询),则查询不返回任何值,因此变量将为null,即使您使用它们,在文本框中显示它们,如果您想确保值不为null,它也不会返回我刚才说的错误