我刚刚阅读了有关同一问题的所有答案,但他们没有帮助。
这是我的c#代码的一部分太长了。它有很多SQLConnection
和2个计时器。
Indirizzo nuovoInd = new Indirizzo();
SqlConnection cn = new SqlConnection(nuovoInd.OttieniIP());
string strSql = "INSERT INTO Pietanze(nome,prezzo,ingredienti,cod_cat) VALUES ('"+nome+"','"+prezzo+"','"+ingredienti+"','"+contCat+"')";
SqlCommand cmd = new SqlCommand(strSql, cn);
cn.Open();
SqlDataReader dr = cmd.ExecuteReader();
或
public static float GetCoperti(int codOrdine)
{
float copertiTot = 0;
List<Ordine> ordini = new List<Ordine>();
VisualizzaOrdini.Form1.Indirizzo nuovoInd = new VisualizzaOrdini.Form1.Indirizzo();
SqlConnection cn = new SqlConnection(nuovoInd.OttieniIP());
string strSql = "SELECT codo,tavolo,InsertDate,nCoperti,costoCoperti FROM Ordini, Riga_Ordine, Coperti where codo=cod_or and cod_or = '"+ codOrdine + "' ORDER BY InsertDate DESC";
SqlCommand cmd = new SqlCommand(strSql, cn);
cn.Open();
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
Ordine currO = new Ordine();
currO.Data = Convert.ToDateTime(dr["InsertDate"]);
currO.Coperti = (int)dr["nCoperti"];
currO.PrezzoCoperto = Convert.ToSingle(dr["costoCoperti"]);
currO.Tavolo = dr["tavolo"].ToString();
currO.Codice = (int)dr["codo"];
copertiTot = (currO.PrezzoCoperto * Convert.ToSingle(currO.Coperti));
ordini.Add(currO);
}
return copertiTot;
}
我正在努力解决代码抛出OutOfMemoryException
的问题。可能是什么导致了这个?我该如何解决?
答案 0 :(得分:0)
在获取记录后,您可能不是Closing您的SqlDataReader
对象,您必须明确关闭它。
dr.Close();
此外,关闭阅读器后关闭您的连接,或按照 Habib 的建议使用using
阻止。
cn.Close();
答案 1 :(得分:0)
首先,打开数据库连接以完全执行代码是不好的做法。将execute语句分配给某些DataTable
。它将为您提供数据库的本地副本。处理起来也更方便,你肯定不会出现内存异常。
Datatable DTab = cmdexecuteReader(); DataSet DSet = cmdexecuteReader();
两者都会给你预期的结果。