C# SqlDataAdapter。在一台服务器上填充超时,但在另一台服务器上不填充超时

C# SqlDataAdapter。在一台服务器上填充超时,但在另一台服务器上不填充超时,c#,sql,.net,sql-server,C#,Sql,.net,Sql Server,我在两台不同的机器上有一个SQL Server 2016数据库,一台是生产环境,另一台是开发环境,这两台机器都是彼此的副本,生产数据库有几个月的额外数据(多1%或2%) 我的问题是,我有一个存储过程,当我调用它时,DbDataAdapter.Fill(command)方法在连接字符串指向生产数据库服务器时超时,并在连接到dev数据库服务器时立即运行 存储过程和参数都是一样的 当我使用SQLServerManagementStudio直接对数据库运行存储过程时,它在生产机器和开发机器上运行不到1秒

我在两台不同的机器上有一个SQL Server 2016数据库,一台是生产环境,另一台是开发环境,这两台机器都是彼此的副本,生产数据库有几个月的额外数据(多1%或2%)

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

存储过程和参数都是一样的

当我使用SQLServerManagementStudio直接对数据库运行存储过程时,它在生产机器和开发机器上运行不到1秒

我还能调查什么?我迷路了

代码:

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

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


关于如何处理这个问题,有一些策略,Ozar在

添加代码…@Gusman代码除了ip地址之外是相同的。我并不是在要求解决方案,而是我可以调查的任何其他问题。代码又大又复杂,不容易在发布时最小化。那么就没有人可以帮助你了,我们看不到代码、过程或者什么都看不到…@Gusman你读过这个问题吗?但是好的,我将尝试创建一个最小版本的代码是的,我读过它,你告诉我们有一个存储过程,在一个环境中立即执行,而在另一个环境中不立即执行,但是不知道该过程做什么或者代码如何调用该过程,那么就无法知道发生了什么。
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