Ich habe eine SQL Server 2016-Datenbank auf zwei verschiedenen Maschinen, eine Produktionsumgebung und Entwicklungsumgebung, beide Kopien von einander mit der Produktionsdatenbank mit ein paar Monaten im Wert von zusätzlichen Daten (1 oder 2% mehr).SqlDataAdapter.Fill Timeout auf einem Server, aber nicht die anderen
Mein Problem ist, dass ich eine gespeicherte Prozedur habe, wenn die DbDataAdapter.Fill(command)
-Methode Timeout, wenn die Verbindungszeichenfolge auf den Produktionsdatenbankserver verweist, und sofort ausgeführt wird, wenn mit dem Datenbankserver verbunden ist.
Alles andere ist gleich, die gespeicherte Prozedur und die Parameter.
Wenn ich die gespeicherte Prozedur direkt mit SQL Server Management Studio für die Datenbank ausführen, läuft es in weniger als 1 Sekunde auf dem Produktionscomputer und auf dem Dev-Computer.
Was kann ich noch untersuchen? Ich
verlorenCode:
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
Fügen Sie den Code ... – Gusman
@Gusman Der Code ist identisch mit Ausnahme der IP-Adresse. Ich frage nicht unbedingt nach der Lösung, sondern nach allem anderen, was ich untersuchen kann. Der Code ist groß und komplex und nicht einfach für die Veröffentlichung zu minimieren. –
Dann wird es niemand geben, der Ihnen helfen kann, wir können den Code, die Prozedur oder nichts sehen ... – Gusman