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

まず、コードを完全に実行するためにデータベース接続を開いたままにしておくことは、悪い習慣です。execute ステートメントを some に割り当てDataTableます。データベースのローカル コピーが提供されます。また、処理がより便利になり、メモリ不足の例外が発生することはありません。

データテーブル DTab = cmdexecuteReader(); DataSet DSet = cmdexecuteReader();

どちらも常に期待される結果をもたらします。

于 2012-08-30T10:47:22.227 に答える
0

レコードをフェッチした後にオブジェクトを閉じていないことが問題かもしれません。明示的に閉じる必要があります。SqlDataReader

dr.Close();

また、リーダーを閉じた後に接続を閉じるか、 Habibusingの提案に従ってブロックを使用します。

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