异常SQL/数据问题

本文关键字:问题 数据 SQL 异常 | 更新日期: 2023-09-27 18:20:40

我们有一个报告给我们带来了一些严重的问题,所以我决定将它放入控制台应用程序中,以解决这些问题。

该报告只是SQL中的一个简单选择,返回大约25列,我们的日期范围可以是3-6个月,返回大约10k行,所以我们谈论的不是很多数据。

以下是发生的事情,当报告运行时,它从我们的网站上超时,在控制台中,它需要13-18分钟才能完成,等待似乎发生在

da.Fill(ds)

现在有一件奇怪的事情,它在SQLServerManagementStudio中运行大约1-3秒,当我们的Delphi开发人员创建类似的应用程序时,运行也需要几秒钟,这只会在使用.NET时发生

我们尝试从数据集更改为加载到数据读取器中,使用此代码

使用(var dr=_command.ExecuteReader()){if(dr.HasRows){int i=0;while(dr.Read()){var startRead=DateTime.Now;Console.Write("{2}''t{0}''t{1}''t",dr.GetInt32(0),dr.Get-String(1),i);var tookRead=DateTime.Now.Subtract(startRead);Console.WriteLine("Take:"+tookRead);i++;}}
然而,它并没有起到任何作用,它只是在卡盘中显示,但经常出现延迟。我在想它的SQL,但无法解释为什么它在Delphi和SQL Management Studio中运行良好。

我已经尝试过在所有框架上使用.NET 2.0、3.5和4。

这是我的代码

公共静态数据集GetData(){var now=DateTime.now;var _command=新的SqlCommand();var _connection=新的SqlConnection();尝试{_connection.ConnectionString=连接字符串;_command.Connection=_Connection;_command.CommandText=storedProcedure;_command.CommandType=CommandType.StoredProcedure;_command.CommandTimeout=60;if(string.IsNullOrEmpty(_connection.ConnectionString)){抛出新异常("未提供连接字符串");}_command.Parameters.Add(新SqlParameter("DateFrom",DateFrom));_command.Parameters.Add(新SqlParameter("DateTo",DateTo));SqlDataAdapter da;var ds=新的DataSet();_connection.Open();var done=DateTime.Now;da=新的SqlDataAdapter(_command);da.填充(ds);if(ds==null){抛出新异常("数据集为null");}if(ds.Tables.Count==0){抛出新异常("表计数为0");}var take=完成。减去(现在);返回ds;}catch(异常ex){File.WriteAllText(Path.Combine(Application.StartupPath,String.Format("异常{0:MMddyyyy_HMmss}.log",DateTime.Now)),例如ToString();}最后{if(_connection.State!=ConnectionState.Closed){_connection.Close();}}返回null;}

有什么想法吗?我们的DBA在指责框架,实际上我在指责SQL中的某些东西。。(可能是统计数据或损坏的数据库)

异常SQL/数据问题

.NET和其他客户端(SQL Management Studio)之间SQL性能的差异通常是由于连接配置不同造成的——常见的罪魁祸首是ANSI_NULLS;ANSI_PADDING。

请尝试在SQL Management Studio中查看连接的配置方式,然后在.NET应用程序中复制相同的内容。

您提供的信息没有包含足够的详细信息来真正帮助。。。

如果SSMS真的快得多,那么原因可能是某些会话/连接设置——与.NET.相比,SSMS使用的设置略有不同

有关可能不同/错误的解释和提示,请参阅http://www.sommarskog.se/query-plan-mysteries.html