0

我刚刚阅读了有关同一问题的所有答案,但它们没有帮助。

这是我的 c# 代码的一部分,它太长了。它有很多SQLConnections 和 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. 这可能是什么原因造成的?我该如何解决?

4

2 回答 2

0

首先,打开数据库连接以完全执行代码是不好的做法。将执行语句分配给 some DataTable。它将为您提供数据库的本地副本。处理起来也更方便,你肯定不会出现内存不足的异常。

数据表 DTab = cmdexecuteReader(); 数据集 DSet = cmdexecuteReader();

两者都会总是给你预期的结果。

于 2012-08-30T10:47:22.227 回答
0

这可能是您在获取记录后没有关闭对象的问题,SqlDataReader必须明确关闭它。

dr.Close();

此外,关闭阅读器后关闭您的连接,或按照Habibusing的建议使用块。

cn.Close();
于 2012-08-30T10:45:23.280 回答