SqlDataAdapter.Fill在一台服务器上超时但不在另一台服务器上

时间:2017-01-25 17:49:44

标签: c# sql .net sql-server

我在两台不同的计算机上有一个SQL Server 2016数据库,一个生产环境和开发环境,两个副本相互生成,生产数据库有几个月的额外数据(1或2%以上)。

我的问题是我有一个存储过程,当我调用它时,DbDataAdapter.Fill(command)方法在连接字符串指向生产数据库服务器时超时,并在连接到开发数据库服务器时立即运行。 / p>

其他一切都是相同的,存储过程和参数。

当我使用SQL Server Management Studio直接针对数据库运行存储过程时,它会在生产计算机和开发计算机上以不到1秒的时间运行。

我还可以调查什么?我迷路了

代码:

SqlCommand cmdDev = new SqlCommand();
cmdDev.Connection = new SqlConnection("Data Source=xxx.xx.x.53;Initial Catalog=Dev;Persist Security Info=True;User ID=userid;Password=password");
cmdDev.CommandText = "spName";
cmdDev.Parameters.Add(new SqlParameter("@OwnedByCompanyID", "100"));
cmdDev.Parameters.AddWithValue("@ClientCompanyID", "0");
cmdDev.Parameters.AddWithValue("@UserID", "0");
cmdDev.Parameters.AddWithValue("@UserID2", "0");
cmdDev.Parameters.AddWithValue("@BranchID", "0");
cmdDev.Parameters.AddWithValue("@Search", "");
cmdDev.Parameters.AddWithValue("@Archived", "0");
cmdDev.CommandType = System.Data.CommandType.StoredProcedure;
SqlDataAdapter adapterDev = new SqlDataAdapter(cmdDev);
DataTable dtDev = new DataTable();
adapterDev.Fill(dtDev); //runs instananeously, and also instantaneously when executed in SSMS

SqlCommand cmdProd = new SqlCommand();
cmdProd.Connection = new SqlConnection("Data Source=xxx.xx.x.55;Initial Catalog=Prod;Persist Security Info=True;User ID=userid;Password=password");
cmdProd.CommandText = "spName";
cmdProd.Parameters.AddWithValue("@OwnedByCompanyID", "100");
cmdProd.Parameters.AddWithValue("@ClientCompanyID", "0");
cmdProd.Parameters.AddWithValue("@UserID", "0");
cmdProd.Parameters.AddWithValue("@UserID2", "0");
cmdProd.Parameters.AddWithValue("@BranchID", "0");
cmdProd.Parameters.AddWithValue("@Search", "");
cmdProd.Parameters.AddWithValue("@Archived", "0");
cmdProd.CommandType = System.Data.CommandType.StoredProcedure;
SqlDataAdapter adapterProd = new SqlDataAdapter(cmdProd);
DataTable dtProd = new DataTable();
adapterProd.Fill(dtProd); //runs for 30+ seconds then times out, but instantaneously when ran in SSMS

1 个答案:

答案 0 :(得分:0)

  

运行30秒以上,然后超时,但在SSMS中运行时即时运行

这可能意味着许多事情,但很可能是它的参数嗅探

有一些关于如何处理这个问题的策略,Ozar在this post中很好地涵盖了它们