DataTable.Dispose()的问题

时间:2009-06-11 23:42:03

标签: c#

DataTable.Dispose()

的问题

您好。

我遇到以下代码的问题,它会导致内存中出现问题。 问题是,不知道转向这个问题。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.IO;
using System.Data;
using System.Data.Sql;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using System.Threading;
using System.Text.RegularExpressions;
using System.Globalization;
using System.Net;
using System.Runtime.Remoting;
using Microsoft.SqlServer;
using Microsoft.SqlServer.Server;

namespace Mirf
{
    class Program
    {

        static void Main(string[] args)
        {
 SqlConnection Lig = new SqlConnection();
        DataTable DataTab = new DataTable();


            string str_ligacao_bd = "Data Source=.\\SQL2005;Database=Bd;Integrated Security=SSPI";

            Lig = new SqlConnection(str_ligacao_bd);
            Lig.Open();

            //Efectua a intrução á tabela seleccionada base de dados
            SqlCommand cmd = Lig.CreateCommand();
            cmd.CommandType = CommandType.Text;
            cmd.CommandText = "SELECT * FROM Tab";

            SqlDataAdapter da = new SqlDataAdapter(cmd);
            DataSet ds = new DataSet();
            da.Fill(ds, "tab");
            DataTab = ds.Tables["tab"];


            cmd.Dispose();
            da.Dispose();
            ds.Dispose();
            Lig.Close();


            foreach (DataColumn  d in DataTab.Columns)
            {
                string linha = d.ColumnName;
                if (linha != "Tid")
                {
                    linha = "[" + linha + "]=1";
                    int sum = (int)(DataTab.Compute("COUNT(TID)",linha));
                }
            }

        }
    }

}
他的代码是。

在几列中计算1的值的最佳方法。
      在某些情况下,需要组合两列或更多列。

由于

3 个答案:

答案 0 :(得分:1)

我不确定你到底想要实现什么,但看起来你真的应该使用SQL来直接得到答案,而不是将整个表读入本地内存然后在本地计算。

答案 1 :(得分:0)

你的桌子有多大?通过从.NET获取所有数据并在.NET中计算内容,您会消耗太多内存。使用数据库,在SQL中计算数据,只需在.NET中获取结果。

答案 2 :(得分:0)

考虑到您在另一条评论中说数据是在文本文件中(尽管您的代码表明它在SQL Server数据库中),我建议使用Linq to Entities。

这是一些链接。

http://msdn.microsoft.com/en-us/library/bb386992.aspx

http://dotnetaddict.dotnetdevelopersjournal.com/adoef_vs_linqsql.htm

http://mark-dot-net.blogspot.com/2008/03/selecting-custom-objects-from-linq.html

您必须编写代码来序列化和反序列化您要针对内存中C#对象构建查询的“行”数据。