2016-04-27 47 views
0

如果我在SSMS中运行存储过程,则需要三秒钟。从C#调用相同的过程需要几分钟的时间才能返回。我怀疑更长的执行时间是返回行数的结果。一个不返回的parpameter case(在我愿意等待的时候)返回38,000行。为什么SQL过程需要3秒。在SSMS中,C#中的分钟数

如何加快返回大量行的查询?

谢谢。

这里是C#:

DataSet ds = new DataSet(); 
DataTable dt = new DataTable(); 
SqlCommand cmd = new SqlCommand(query, conn); 
cmd.CommandType = CommandType.StoredProcedure; 
cmd.CommandTimeout = 60000; 
cmd.Parameters.Add("@Family_Code", SqlDbType.VarChar).Value = "SPCF"; 
SqlDataReader dr = cmd.ExecuteReader(); // takes 'forever' 
dt.Load(dr); 
ds.Tables.Add(dt); 
+0

提供用于返回数据的查询/存储过程。 –

+0

我的工作地点的生产数据库中有一个非常类似的问题(原始SQL占用了1/4秒,C#花费了2-4分钟)。我与DBA一起在Internet上寻找解决方案几周后感到困扰,并且没有发现任何工作,并且我无法在我们的开发和测试数据库中重现它。最后我们重新创建了数据库,问题消失了,并且从那以后没有回来。从来没有找到根本原因。 –

+0

您是否使用过SQL Profiler来查看它是否确实在做一些意想不到的事情? – BBauer42

回答

0

感谢您的所有建议。 This原来是为了改善事情。查询时间减少到可接受的< 5秒。

我在主查询之前将以下几行添加到C#代码中。这个想法是设置SSMS使用的设置。

SqlCommand cmdOption1 = 
     new SqlCommand("SET TRANSACTION ISOLATION LEVEL READ COMMITTED", conn); 
int rc = cmdOption1.ExecuteNonQuery(); 
相关问题