C# C+SQL Select+dataset+dataadapter=内存不足

C# C+SQL Select+dataset+dataadapter=内存不足,c#,sql,dataset,dataadapter,C#,Sql,Dataset,Dataadapter,我目前正在尝试使用C来读取SQL数据库。为此,我使用OleDB和select语句。这将进入数据集,然后数据集填充数据适配器。然后我遍历每一行并计算内容 首先,我觉得有一种更好/更有效的方法可以做到这一点,因为我从未真正回写SQL DB。我只是根据我选择的来计算 无论如何,超过某一点时,我会出现内存不足错误和/或来自Ssms.exe的错误,表示无法为堆栈创建新的保护页 从我看到的其他问题来看,我需要使用DataReader,但我似乎无法让它以与数据适配器相同的方式工作,我想这并不令人惊讶 我现在拥

我目前正在尝试使用C来读取SQL数据库。为此,我使用OleDB和select语句。这将进入数据集,然后数据集填充数据适配器。然后我遍历每一行并计算内容

首先,我觉得有一种更好/更有效的方法可以做到这一点,因为我从未真正回写SQL DB。我只是根据我选择的来计算

无论如何,超过某一点时,我会出现内存不足错误和/或来自Ssms.exe的错误,表示无法为堆栈创建新的保护页

从我看到的其他问题来看,我需要使用DataReader,但我似乎无法让它以与数据适配器相同的方式工作,我想这并不令人惊讶

我现在拥有的代码是:

OleDbConnection myConn = new OleDbConnection(@"SQLDB connection string here");

        OleDbCommand cmd = new OleDbCommand();
        cmd.CommandText = <selectstatement here>
        cmd.Connection = myConn;
        cmd.CommandTimeout = 0;

        OleDbDataAdapter da = new OleDbDataAdapter(cmd);
        DataSet ds = new DataSet();
        da.Fill(ds);

        myConn.Close();
我想我的问题是双重的,就像我上面说的。一个是DataReader解决了我的问题并允许我遍历数据,另一个是我如何调整上面的第一个代码段以支持这一点


另外,因为我在其他地方看到过,所以我在应用程序上使用x64。

查看MSDN页面底部描述OleDbDataReader类的内容:-这里有一个使用示例。当然,您可以在循环中执行任何需要的操作—填充数据集或其他任何操作。但你也可能根本不需要数据集——这取决于你的具体任务和计算中返回数据的需要。是的,完全可以使用数据阅读器来循环查询结果并进行计算。我们真的需要知道您的查询是什么以及您试图计算什么才能给出答案。您也可能能够在SQL中进行计算,从而减少从数据库返回的数据量。仅当您需要以断开连接的方式处理数据时,才使用数据集。否则,您可以在datareader上循环并节省大量内存。无论如何,您的数据源中有多少表和行?如果您的查询检索到大量数据,您应该考虑另一种方法,可能是分页数据加载。我看到了关于OleDBDataReader的MSDN页面。我不清楚我是如何调整代码的:If dr[column1]==DBNull.Value&&dr[column2]!=DBNull.Value首先检查每行特定字段中的null值,然后检查如何检索特定值,即valueIWant=dr[column3];我试图根据特定的标准从不同的列中检索值,取总和和平均值,等等。实际上,这是相当多的数据。一个有效的数据是300000行,而没有有效的大数据集接近800万行
     foreach (DataTable table in ds.Tables)
        {
            foreach (DataRow dr in table.Rows)
            {
                  //do stuff