sql >> Databasteknik >  >> RDS >> Sqlserver

Asynkront anrop av en SQL Server lagrad procedur i C#

I ditt SqlCommand du kan köra kommandon asynkront med BeginExecuteNonQuery och EndExecuteNonQuery . Den senare kommer att blockera tills den är klar. Detta kommer dock inte att rapportera framstegen från servern om hur säkerhetskopieringen går - jag skulle använda en markeringsram för det.

För att undvika EndExecuteNonQuery från att blockera ditt användargränssnitt (beroende på hur du hanterar det), behöver du en bakgrundstråd. Om du använder detta kan du lika gärna inte använda BeginXXX EndXXX metoder och gör det synkront på en bakgrundstråd - BackgroundWorker är bäst för detta.

För att undvika att använda en bakgrundstråd i användargränssnittet istället för att blockera EndXXX du måste registrera en återuppringning och hantera den resulterande händelsen (ringer EndXXX i den här händelsehanteraren, men den kommer tillbaka omedelbart).

Uppdatering: enligt en kommentar, för asynkrona anrop till SQL-kommandot/anslutningsgrejer, måste du ange så mycket i anslutningssträngen:

http://www.connectionstrings.com/sql-server-2008

Server=myServerAddress; Database=myDataBase; Integrated Security=True; Asynchronous Processing=True;

Eller i kod med anslutningssträngbyggaren:

builder.AsynchronousProcessing = true;


  1. Hur man tar bort ledande blanksteg i MySQL

  2. Django IntegerRangeField Validering misslyckas

  3. Infogar data i sql-tabellen i Eclipse EE

  4. Hur kan jag iterera genom en MySQL-resultatuppsättning?