public string GetAllProducts()
{
string connStr = "server=localhost;user=root;database=tp1;port=3306;password=";
MySqlConnection conn = new MySqlConnection(connStr);
try
{
Console.WriteLine("Connecting to MySQL...");
conn.Open();
string sql = "SELECT * FROM material";
MySqlCommand cmd = new MySqlCommand(sql, conn);
MySqlDataReader rdr = cmd.ExecuteReader();
while (rdr.Read())
{
return (rdr[0] " -- " rdr[1] " -- " rdr[2] " -- " rdr[3]);
}
rdr.Close();
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
conn.Close();
Console.WriteLine("Done.");
return "No records found";
}
此時我在“材料”表上有四個條目。只回傳第一個。
這是輸出:
搖擺輸出
“材料”內容
uj5u.com熱心網友回復:
您已經return在回圈內部放置了一個讀取資料的回圈。Loop 因此不會以回圈方式執行!
真的你的代碼應該看起來更像:
public List<Product> GetAllProducts()
{
string connStr = "server=localhost;user=root;database=tp1;port=3306;password=";
using var conn = new MySqlConnection(connStr);
conn.Open();
string sql = "SELECT * FROM material";
using var cmd = new MySqlCommand(sql, conn);
using var rdr = cmd.ExecuteReader();
var products = new List<Product>();
while (rdr.Read())
{
var p = new Product(
rdr.GetInt32(0), //id
rdr.GetString(1), //ref
rdr.GetString(2), //name
rdr.GetInt32(3) //qty
);
products.Add(p);
}
return products;
}
public record Product(int Id, string Ref, string Name, int Qty);
(為了清晰起見,嘗試/捕獲已洗掉;隨時將其放回原處)
請注意,此 C# 使用了更多最新功能,例如記錄和使用 var;如果您遇到語法錯誤,請告訴我它們是什么,以便我可以建議與您的 C# 版本兼容的不同語法
順便說一句,我發現這種從資料庫中獲取資料的方式非常乏味。您可以通過安裝一個名為 Dapper 的庫來大量減少它。使用 Dapper,我上面寫的所有代碼都簡化為:
public List<Product> GetAllProducts()
{
string connStr = "server=localhost;user=root;database=tp1;port=3306;password=";
using var conn = new MySqlConnection(connStr);
return conn.Query<Product>("SELECT * FROM material").ToList();
}
如果要引數化查詢:
public List<Product> GetAllProductsNamed(string n)
{
string connStr = "server=localhost;user=root;database=tp1;port=3306;password=";
using var conn = new MySqlConnection(connStr);
return conn.Query<Product>(
"SELECT * FROM material WHERE name = @theName",
new{ theName = n }
).ToList();
}
如果你不打算使用像 EF 這樣的高功率 ORM,那么生命太短暫了,不能不使用 Dapper(沒有從屬關系):)
uj5u.com熱心網友回復:
您在第一個之后回傳Read(),請嘗試以下操作:
var output = string.Empty;
while (rdr.Read())
{
output = (rdr[0] " -- " rdr[1] " -- " rdr[2] " -- " rdr[3]);
}
rdr.Close();
return output;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/360543.html
上一篇:簡單的Oracle查詢回傳OracleCommand.CommandText無效
下一篇:在Godot中使用C#異步延遲
