簡體   English   中英

解析整數時,“輸入字符串的格式不正確”

[英]c# - 'input string was not in a correct format' when parsing integers

好的,所以我想從SQL中的數據庫中獲取18個“價格”,然后將其設置在本地數組中。 到目前為止,我在數據檢索中具有以下邏輯:

private void dbPrices()
{
    string myConnectionString;

    myConnectionString = "server=127.0.0.1;uid=root;" +
        "pwd=;database=phvpos";

    try
    {
        conn = new MySql.Data.MySqlClient.MySqlConnection();
        conn.ConnectionString = myConnectionString;
        conn.Open();
    }
    catch (MySql.Data.MySqlClient.MySqlException ex)
    {
        MessageBox.Show(ex.Message);
    }

    for (int i = 1; i < 19; i++)
    {
        MySqlCommand cmd = conn.CreateCommand();
        cmd.CommandText = "SELECT price from products where id = '" + i + "'";

        MySqlDataReader reader = cmd.ExecuteReader();

        while (reader.Read())
        {
            pr[i] = reader.ToString();
            prods[i] = int.Parse(pr[i]);
        }
    }
}

獲得總金額的邏輯如下:

private void btnTotal_Click(object sender, EventArgs e)
{
    dbPrices();

    itemcost[0] = Convert.ToInt32(txtRice.Text) * prods[0];
    itemcost[1] = Convert.ToInt32(txtAdobo.Text) * prods[1];
    itemcost[2] = Convert.ToInt32(txtIgado.Text) * prods[2];
    itemcost[3] = Convert.ToInt32(txtSisig.Text) * prods[3];
    ...
    itemcost[18] = itemcost[0] + itemcost[1] + itemcost[2] + itemcost[3] + itemcost[4] + itemcost[5]
        + itemcost[6] + itemcost[7] + itemcost[8] + itemcost[9] + itemcost[10]
        + itemcost[11] + itemcost[12] + itemcost[13] + itemcost[14] + itemcost[15]
        + itemcost[16] + itemcost[17];

    int totalPrice = itemcost[18];

    lblTotal.Text = Convert.ToString(totalPrice);
}

dbPrices()中的這一行顯示“輸入字符串的格式不正確”錯誤:

while (reader.Read())
{
    pr[i] = reader.ToString();
    prods[i] = int.Parse(pr[i]);
}

我也嘗試過:

while (reader.Read())
{
    prods[i] = Convert.toInt32(reader.ToString());
}

而且還會吐出同樣的錯誤。 我做錯了什么嗎?

嘗試這個。 我發現使用“閱讀器”時,即使您的查詢僅獲取一個值,您仍然需要指定要查找的值。

prods[i] = int.Parse(reader["price"]);

如果價格在數據庫中為空,則使用三元運算符

prods[i] = reader["price"] == DBNull.Value ? 0 : int.parse(reader["price"]);

結果的值需要轉換為int,並且for循環塊將來可能會導致嚴重的問題,您可能需要進行投影查詢,然后分配結果的值。

MySqlCommand cmd = conn.CreateCommand();
cmd.CommandText = $"SELECT price FROM products WHERE id BETWEEN 1 AND 18"; //use projection. if you have a dynamic product id set, you can use IN in query.
MySqlDataReader reader = cmd.ExecuteReader();
var counter = 0; //counter
while (reader.Read())
{   
    prods[counter] = Convert.ToInt32(reader["price"]); //convert the result first then assign it to the item.
    counter++;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM