sql >> Databasteknik >  >> RDS >> Sqlserver

SQL-frågan långsam i .NET-applikation men omedelbar i SQL Server Management Studio

Enligt min erfarenhet beror den vanliga anledningen till att en fråga går snabbt i SSMS men långsamt från .NET på skillnader i anslutningens SET -tings. När en anslutning öppnas av antingen SSMS eller SqlConnection , ett gäng SET kommandon utfärdas automatiskt för att ställa in exekveringsmiljön. Tyvärr SSMS och SqlConnection har olika SET standardvärden.

En vanlig skillnad är SET ARITHABORT . Prova att utfärda SET ARITHABORT ON som det första kommandot från din .NET-kod.

SQL Profiler kan användas för att övervaka vilken SET kommandon utfärdas av både SSMS och .NET så att du kan hitta andra skillnader.

Följande kod visar hur man utfärdar en SET kommandot men observera att den här koden inte har testats.

using (SqlConnection conn = new SqlConnection("<CONNECTION_STRING>")) {
    conn.Open();

    using (SqlCommand comm = new SqlCommand("SET ARITHABORT ON", conn)) {
        comm.ExecuteNonQuery();
    }

    // Do your own stuff here but you must use the same connection object
    // The SET command applies to the connection. Any other connections will not
    // be affected, nor will any new connections opened. If you want this applied
    // to every connection, you must do it every time one is opened.
}


  1. Hur kan jag veta om ett SQL-undantag kastades på grund av brott mot främmande nyckel?

  2. Mappning av PostgreSQL-text[][]-typ och Java-typ

  3. Varför ska jag använda int istället för en byte eller short i C#

  4. Hur MINUTE() fungerar i MariaDB