C# 大型sql Select上的超时

C# 大型sql Select上的超时,c#,sql,performance,select,C#,Sql,Performance,Select,避免在非常大的sql select语句上超时的最佳方法是什么 List<int> klienter = FundneKlienter.Keys.ToList(); if (klienter.Count > 0) { Dictionary<int, String> klientNavne = new Dictionary<int, string>(klienter.Count); String sql = "SELECT [0],[1]

避免在非常大的sql select语句上超时的最佳方法是什么

List<int> klienter = FundneKlienter.Keys.ToList();

if (klienter.Count > 0)
{
    Dictionary<int, String> klientNavne = new Dictionary<int, string>(klienter.Count);
    String sql = "SELECT [0],[1] FROM [Tabel] WHERE [0] IN " + klienter.ToSqlList();

    using (SqlCommand cmd = new SqlCommand(sql, _connection))
    using (SqlDataReader sr = cmd.ExecuteReader())
        if (sr.HasRows)
            while (sr.Read())
                klientNavne.Add(int.Parse(sr["0"].ToString()), sr["1"].ToString());
List klienter=FundneKlienter.Keys.ToList();
如果(klienter.Count>0)
{
Dictionary klientNavne=新字典(klienter.Count);
String sql=“从“+klienter.ToSqlList()中[0]的[Tabel]中选择[0],[1];
使用(SqlCommand cmd=newsqlcommand(sql,_连接))
使用(SqlDataReader sr=cmd.ExecuteReader())
if(sr.HasRows)
while(sr.Read())
添加(int.Parse(sr[“0”].ToString()),sr[“1”].ToString());
这个“克林特”列表可以包含从op到700万的ID,全部都是4-5个数字长

优化此查询的最佳方法是什么

我在40.000+之后超时??我不熟悉大型SQL语句


如果需要更多代码来帮助我,请告诉我。

避免超时问题的一种方法是添加:

SqlCommand.CommandTimeout = 0;
报告说:

值为0表示没有限制(尝试执行命令将导致 无限期等待)


Rahul上面的回答很好……您也可以选择优化查询—考虑索引等。

使用字符串连接来构造SQL命令不是一种好的做法。StringBuilder在循环中生成有效的SQL命令和SQL参数,是避免这种情况的一种可能方法。即使它与您的查询无关问题,但老实说(除了在表中使用索引之外):你确定你真的需要应用程序内存中的所有700万id吗?通常,当我在代码中看到一个地方需要这么大的列表时,我的闹钟就会响起来,我问自己是否可以通过使用连接或子查询来重做需要该列表的SQL来缩小它,…不确定你的用例,因此问你是否需要这样做你确定你真的需要在你的应用程序中的一个列表中的所有700万个条目,这通常是多余的。这是一个很好的观点,你可能有一些正确的部分。事情是这样的。我有很多usercontrols 20-30都有一些控件。这些usercontrols有一个select语句Fx“select top 1000”然后下一个用户控件有一个select语句Fx“SELECTTOP2000”,但第二个用户控件无法在第一个中选择任何内容,依此类推。是否有避免此错误的好方法?其他信息:内部错误:已达到表达式服务限制。请在查询中查找可能复杂的表达式,并尝试简化它们。也可以在应用程序中添加超时设置配置文件,这实际上使其可根据情况进行调整。总之,Rahul为您提供了一种永远不让查询超时的方法。这是一个好主意,听上去您应该做些什么。因为您遇到了超时问题,所以我得出结论,您的查询运行了很长时间,这就是我建议实现的原因索引等作为一种加速的手段…感谢我现在创建了一些索引,它现在运行得更好了