我一直在尝试一种更有效的方法来获取数据并将数据从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种产品的价格,但在这段代码中,我只能设置一个价格。任何形式的帮助将不胜感激。
答案 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个),你就不会想要一次性将它们全部保存在内存中,但是现在这样做会很好。