C#SQL查询阻止服务器内存

Mes*_*ese 1 c# sql linq sql-server entity-framework

我还是有点新手,我被分配了维护先前完成的代码的任务.我有一个模拟SQL Management Studio的Web,例如限制删除选项,因此基本用户不会搞砸我们的服务器.好吧,我们有一个函数,需要一个查询或查询,它工作正常,但我们的服务器RAM被复杂的查询炸毁,也许它不是那么多的数据,但它的铸造xml和所有那些我仍然没有的东西在SQL中理解.

这是实际的功能:

public DataSet ExecuteMultipleQueries(string queries)
    {
        var results = new DataSet();
        using (var myConnection = new SqlConnection(_connectionString))
        {
            myConnection.Open();
            var sqlCommand = myConnection.CreateCommand();
            sqlCommand.Transaction = myConnection.BeginTransaction(IsolationLevel.ReadUncommitted);
            sqlCommand.CommandTimeout = AppSettings.SqlTimeout;
            sqlCommand.CommandText = queries.Trim();
            var dataAdapter = new SqlDataAdapter { SelectCommand = sqlCommand };
            dataAdapter.Fill(results);
            return results;
        }
    }
Run Code Online (Sandbox Code Playgroud)

我有点失落,我读过许多不同的答案,但要么我不理解他们,要么他们不以任何方式解决我的问题.

我知道我可以使用Linq-toSql-或Entity,我尝试了它们但我真的不知道如何使用"未知"查询,我可以尝试更多地研究,所以如果你认为它们会帮助我接近一个解决方案,无论如何,我会尝试学习它.

所以要点:

该函数似乎在dataAdapter.Fill(results)调试时停止,此时服务器尝试回答查询并消耗其所有RAM并阻塞自身.我怎么解决这个问题?我想也许可以让SQL返回一定数量的数据,将它存储在某个集合中,然后继续返回数据,并继续前进,直到没有更多数据从SQL返回,但我真的不知道如何检测还有从SQL返回的数据.

我还考虑过在两个不同的线程中读取和存储,但我不知道一个线程中的数据如何存储在其他线程异步中(如果它解决了问题,则更少).

所以,是的,我根本没有任何明确的信息,所以任何指导或提示都会受到高度赞赏.

在此先感谢并为长篇文章感到抱歉.

Yga*_*bel 5

您可以使用分页来仅获取部分数据.

你的代码将是这样的:

dataAdapter.Fill(results, 0, pageSize);

pageSize 可以达到你想要的尺寸(例如100或250).

您可以在这篇 msdn文章中获得更多信息.