我做了我的reader.close()
,它也不起作用。你能帮我解决我的问题吗?
IList<Borne> ListeBorne = new List<Borne>();
NpgsqlCommand maCommande2 = new NpgsqlCommand("Select * from borne;", conn);
NpgsqlDataReader monReader2 = maCommande2.ExecuteReader(CommandBehavior.CloseConnection);
NpgsqlCommand maCommandeEncaiss= new NpgsqlCommand("Select * from encaissement;", conn);
NpgsqlDataReader monReaderEncaiss = maCommandeEncaiss.ExecuteReader(CommandBehavior.CloseConnection);
while (monReaderEncaiss.Read())
{
Encaissement encaiss = new Encaissement();
encaiss.id = monReaderEncaiss.GetInt32(0);
encaiss.mode_paiemant = monReaderEncaiss.GetString(2);
encaiss.num_fact = monReaderEncaiss.GetString(9);
ListEncaissement.Add(encaiss);
}
while (monReader2.Read())
{
Borne b = new Borne();
b.id = monReader2.GetInt32(0);
b.nom = monReader2.GetString(2);
ListeBorne.Add(b);
}
ViewBag.ref_borne = new SelectList(ListeBorne, "id", "nom");
ViewBag.num_fact = new SelectList(ListEncaissement, "id", "num_fact");
ViewBag.mode_paiement = new SelectList(ListEncaissement, "id", "mode_paiemant");
我在connectionString web配置中添加了preload reader = true
,但它还没有工作。
您必须关闭阅读器才能在同一连接上使用其他阅读器。
你应该尽可能使用using
语句来实现IDisposable
:
using (var conn = new NpgsqlConnection("connection-string"))
{
using (var command = new NpgsqlCommand("Select * from encaissement", conn))
{
conn.Open();
using (NpgsqlDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
var encaiss = new Encaissement();
encaiss.id = reader.GetInt32(0);
encaiss.mode_paiemant = reader.GetString(2);
encaiss.num_fact = reader.GetString(9);
ListEncaissement.Add(encaiss);
}
}
}
using (var command = new NpgsqlCommand("Select * from borne", conn))
{
using (NpgsqlDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
var b = new Borne();
b.id = reader.GetInt32(0);
b.nom = reader.GetString(2);
ListeBorne.Add(b);
}
}
}
}
“在使用SqlDataReader时,关联的SqlConnection正忙于为SqlDataReader提供服务,除了关闭它之外,不能对SqlConnection执行任何其他操作。” - msdn。
通常,您可能必须手动关闭连接。但是如果使用CommandBehavior.CloseConnection
,则“当关联的DataReader对象关闭时,Connection对象将被关闭”。 - msdn。
IList<Borne> ListeBorne = new List<Borne>();
NpgsqlCommand maCommandeEncaiss= new NpgsqlCommand("Select * from encaissement;", conn);
NpgsqlDataReader monReaderEncaiss = maCommandeEncaiss.ExecuteReader(CommandBehavior.CloseConnection);
while (monReaderEncaiss.Read())
{
Encaissement encaiss = new Encaissement();
encaiss.id = monReaderEncaiss.GetInt32(0);
encaiss.mode_paiemant = monReaderEncaiss.GetString(2);
encaiss.num_fact = monReaderEncaiss.GetString(9);
ListEncaissement.Add(encaiss);
}
monReaderEncaiss.Close();
NpgsqlCommand maCommande2 = new NpgsqlCommand("Select * from borne;", conn);
NpgsqlDataReader monReader2 = maCommande2.ExecuteReader(CommandBehavior.CloseConnection);
while (monReader2.Read())
{
Borne b = new Borne();
b.id = monReader2.GetInt32(0);
b.nom = monReader2.GetString(2);
ListeBorne.Add(b);
}
monReader2.Close();
etc...