C# - 从mysql中检索数据然后存储到变量中

时间:2017-09-05 11:51:48

标签: c# mysql

我一直在尝试一种更有效的方法来获取数据并将数据从mysql中的数据库设置为变量。我已经使用for循环来缩短代码并使其更容易阅读,但我想不出正确设置其他变量的方法。这是我的代码:

注意:我使用18种不同的局部变量。 (i.g ad,mnd,psk,pck等。)

for (int i = 1; i <= 18; i++) {
  MySqlCommand cmd = dbConn.CreateCommand();
  cmd.CommandText = "SELECT price from products where productID = '" + i + "'";
  MySqlDataReader reader = cmd.ExecuteReader();
  while (reader.Read()) {
    ad = Convert.ToInt32(reader.ToString());
  }
}

我正在尝试从数据库中检索18种产品的价格,但在这段代码中,我只能设置一个价格。任何形式的帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

您将所有价格分配给1个变量。你的代码就像这样运行

ad = 150; //sample price
ad = 240; 
ad = 100;
...(18 times)

您必须使用数组而不是单个变量。

将您的代码更改为:

  MySqlCommand cmd = dbConn.CreateCommand();
  cmd.CommandText = "SELECT price from products where productID > 1 AND productID < 19" ;
  MySqlDataReader reader = cmd.ExecuteReader();
  int counter = 0;
  while (reader.Read()) {
    ad[counter++] = Convert.ToInt32(reader.ToString());
  }

答案 1 :(得分:1)

好的,稍微改变你的架构,所以你有

name    | price    | id
------------------------
'ad'      1.00       1
'mnd'     42.24      2
'psk'     6.66       3
'pck'     2.00       4
'etc'     9999.99    5
...

然后像这样使用Dapper,

using Dapper;

...

IDictionary<string, decimal> products; 
using(var connection = new SqlConnection(GetConnectionString()))
{
    connection.Open();
    products = connection.Query("SELECT name, price FROM products;")
        .ToDictionary(
            row => (string)row.Name,
            row => (decimal)row.Price);
}

那么你可以得到你想要的任何产品,

var adPrice = products["ad"]; 

一旦你有很多产品(超过18个),你就不会想要一次性将它们全部保存在内存中,但是现在这样做会很好。