SqlCommand.BeginExecuteNonQuery Metódus
Definíció
Fontos
Egyes információk olyan, kiadás előtti termékekre vonatkoznak, amelyek a kiadásig még jelentősen módosulhatnak. A Microsoft nem vállal kifejezett vagy törvényi garanciát az itt megjelenő információért.
Elindítja a Transact-SQL utasítás vagy a tárolt eljárás aszinkron végrehajtását, amelyet az SqlCommand ír le.
Túlterhelések
| Name | Description |
|---|---|
| BeginExecuteNonQuery() |
Elindítja a Transact-SQL utasítás vagy a tárolt eljárás aszinkron végrehajtását, amelyet az SqlCommand ír le. |
| BeginExecuteNonQuery(AsyncCallback, Object) |
Kezdeményezi a Transact-SQL utasítás vagy a SqlCommand által leírt tárolt eljárás aszinkron végrehajtását visszahívási eljárás és állapotinformációk alapján. |
BeginExecuteNonQuery()
Elindítja a Transact-SQL utasítás vagy a tárolt eljárás aszinkron végrehajtását, amelyet az SqlCommand ír le.
public:
IAsyncResult ^ BeginExecuteNonQuery();
public IAsyncResult BeginExecuteNonQuery();
member this.BeginExecuteNonQuery : unit -> IAsyncResult
Public Function BeginExecuteNonQuery () As IAsyncResult
Válaszok
Olyan IAsyncResult érték, amely az eredmények lekérdezésére vagy várakozására használható, vagy mindkettőre; erre az értékre a meghíváskor EndExecuteNonQuery(IAsyncResult)is szükség van, amely az érintett sorok számát adja vissza.
Kivételek
A SqlDbTypebináristól vagy a VarBinarytól eltérő függvényt használt a rendszer, amikor Value a beállítás értéke Stream. A streamelésről további információt az SqlClient streamelési támogatásában talál.
-vagy-
A SqlDbTypechar, NChar, NVarChar, VarChar vagy Xml kivételével más is használható volt a beállításnál ValueTextReader.
-vagy-
Az SqlDbTypeXml-fájltól eltérő érték lett használva a ValuebeállításkorXmlReader.
Bármilyen hiba, amely a parancsszöveg végrehajtása során történt.
-vagy-
Időtúllépés történt egy streamelési művelet során. A streamelésről további információt az SqlClient streamelési támogatásában talál.
Az "Aszinkron processing=true" név-érték pár nem szerepel a kapcsolati karakterlánc, amely meghatározza a SqlCommand kapcsolatát.
-vagy-
A SqlConnection streamelési művelet során bezárt vagy elvetett. A streamelésről további információt az SqlClient streamelési támogatásában talál.
Hiba történt egy Stream, XmlReader vagy TextReader objektumban egy streamelési művelet során. A streamelésről további információt az SqlClient streamelési támogatásában talál.
Az Stream, XmlReader vagy TextReader objektum egy streamelési művelet során lett bezárva. A streamelésről további információt az SqlClient streamelési támogatásában talál.
Példák
Az alábbi konzolalkalmazás aszinkron módon hozza létre a frissítések adatait az AdventureWorks mintaadatbázisban. Egy hosszú ideig futó folyamat emulálásához ez a példa beszúr egy WAITFOR utasítást a parancsszövegbe. Általában nem kell erőfeszítéseket tennie, hogy a parancsok lassabban fussanak, de ebben az esetben ez megkönnyíti az aszinkron viselkedés bemutatását.
using System.Data.SqlClient;
class Class1
{
static void Main()
{
// This is a simple example that demonstrates the usage of the
// BeginExecuteNonQuery functionality.
// The WAITFOR statement simply adds enough time to prove the
// asynchronous nature of the command.
string commandText =
"UPDATE Production.Product SET ReorderPoint = ReorderPoint + 1 " +
"WHERE ReorderPoint Is Not Null;" +
"WAITFOR DELAY '0:0:3';" +
"UPDATE Production.Product SET ReorderPoint = ReorderPoint - 1 " +
"WHERE ReorderPoint Is Not Null";
RunCommandAsynchronously(commandText, GetConnectionString());
Console.WriteLine("Press ENTER to continue.");
Console.ReadLine();
}
private static void RunCommandAsynchronously(
string commandText, string connectionString)
{
// Given command text and connection string, asynchronously execute
// the specified command against the connection. For this example,
// the code displays an indicator as it is working, verifying the
// asynchronous behavior.
using (SqlConnection connection =
new SqlConnection(connectionString))
{
try
{
int count = 0;
SqlCommand command = new SqlCommand(commandText, connection);
connection.Open();
IAsyncResult result = command.BeginExecuteNonQuery();
while (!result.IsCompleted)
{
Console.WriteLine("Waiting ({0})", count++);
// Wait for 1/10 second, so the counter
// does not consume all available resources
// on the main thread.
System.Threading.Thread.Sleep(100);
}
Console.WriteLine("Command complete. Affected {0} rows.",
command.EndExecuteNonQuery(result));
}
catch (SqlException ex)
{
Console.WriteLine("Error ({0}): {1}", ex.Number, ex.Message);
}
catch (InvalidOperationException ex)
{
Console.WriteLine("Error: {0}", ex.Message);
}
catch (Exception ex)
{
// You might want to pass these errors
// back out to the caller.
Console.WriteLine("Error: {0}", ex.Message);
}
}
}
private static string GetConnectionString()
{
// To avoid storing the connection string in your code,
// you can retrieve it from a configuration file.
// If you have not included "Asynchronous Processing=true" in the
// connection string, the command is not able
// to execute asynchronously.
return "Data Source=(local);Integrated Security=SSPI;" +
"Initial Catalog=AdventureWorks; Asynchronous Processing=true";
}
}
Imports System.Data.SqlClient
Module Module1
Sub Main()
' This is a simple example that demonstrates the usage of the
' BeginExecuteNonQuery functionality.
' The WAITFOR statement simply adds enough time to prove the
' asynchronous nature of the command.
Dim commandText As String =
"UPDATE Production.Product SET ReorderPoint = ReorderPoint + 1 " &
"WHERE ReorderPoint Is Not Null;" &
"WAITFOR DELAY '0:0:3';" &
"UPDATE Production.Product SET ReorderPoint = ReorderPoint - 1 " &
"WHERE ReorderPoint Is Not Null"
RunCommandAsynchronously(commandText, GetConnectionString())
Console.WriteLine("Press ENTER to continue.")
Console.ReadLine()
End Sub
Private Sub RunCommandAsynchronously(
ByVal commandText As String, ByVal connectionString As String)
' Given command text and connection string, asynchronously execute
' the specified command against the connection. For this example,
' the code displays an indicator as it is working, verifying the
' asynchronous behavior.
Using connection As New SqlConnection(connectionString)
Try
Dim count As Integer = 0
Dim command As New SqlCommand(commandText, connection)
connection.Open()
Dim result As IAsyncResult = command.BeginExecuteNonQuery()
While Not result.IsCompleted
Console.WriteLine("Waiting ({0})", count)
' Wait for 1/10 second, so the counter
' does not consume all available resources
' on the main thread.
Threading.Thread.Sleep(100)
count += 1
End While
Console.WriteLine("Command complete. Affected {0} rows.",
command.EndExecuteNonQuery(result))
Catch ex As SqlException
Console.WriteLine("Error ({0}): {1}", ex.Number, ex.Message)
Catch ex As InvalidOperationException
Console.WriteLine("Error: {0}", ex.Message)
Catch ex As Exception
' You might want to pass these errors
' back out to the caller.
Console.WriteLine("Error: {0}", ex.Message)
End Try
End Using
End Sub
Private Function GetConnectionString() As String
' To avoid storing the connection string in your code,
' you can retrieve it from a configuration file.
' If you have not included "Asynchronous Processing=true" in the
' connection string, the command is not able
' to execute asynchronously.
Return "Data Source=(local);Integrated Security=SSPI;" &
"Initial Catalog=AdventureWorks; Asynchronous Processing=true"
End Function
End Module
Megjegyzések
A BeginExecuteNonQuery metódus elindítja egy Transact-SQL utasítás vagy tárolt eljárás aszinkron végrehajtásának folyamatát, amely nem ad vissza sorokat, így a többi feladat párhuzamosan futhat az utasítás végrehajtása közben. Ha az utasítás befejeződött, a fejlesztőknek meg kell hívniuk a EndExecuteNonQuery metódust a művelet befejezéséhez. A BeginExecuteNonQuery metódus azonnal visszatér, de amíg a kód nem hajtja végre a megfelelő EndExecuteNonQuery metódushívást, nem hajthat végre más hívásokat, amelyek szinkron vagy aszinkron végrehajtást indítanak ugyanahhoz SqlCommand az objektumhoz. Ha a EndExecuteNonQuery parancs végrehajtása előtt hívja meg az objektumot, az SqlCommand a végrehajtás befejezéséig blokkolódik.
Vegye figyelembe, hogy a parancs szövegét és paramétereit a rendszer szinkron módon küldi el a kiszolgálónak. Ha nagy parancsot vagy több paramétert küld, ez a módszer blokkolhatja az írások során. A parancs elküldése után a metódus azonnal visszatér, anélkül, hogy választ vár a kiszolgálótól – vagyis az olvasások aszinkronok.
Mivel ez a túlterhelés nem támogatja a visszahívási eljárást, a fejlesztőknek le kellkérdezniük, hogy a parancs befejeződött-e a metódus által IsCompleted visszaadott tulajdonság IAsyncResult használatávalBeginExecuteNonQuery, vagy várniuk kell egy vagy több parancs befejezésére a AsyncWaitHandle visszaadott IAsyncResulttulajdonság használatával.
Ez a metódus figyelmen kívül hagyja a tulajdonságot CommandTimeout .
Lásd még
- Az adatok összekapcsolása és lekérése az ADO-ban.NET
A .NET-keretrendszer Data Provider használata SQL Server - ADO.NET áttekintése
A következőre érvényes:
BeginExecuteNonQuery(AsyncCallback, Object)
Kezdeményezi a Transact-SQL utasítás vagy a SqlCommand által leírt tárolt eljárás aszinkron végrehajtását visszahívási eljárás és állapotinformációk alapján.
public:
IAsyncResult ^ BeginExecuteNonQuery(AsyncCallback ^ callback, System::Object ^ stateObject);
public IAsyncResult BeginExecuteNonQuery(AsyncCallback callback, object stateObject);
member this.BeginExecuteNonQuery : AsyncCallback * obj -> IAsyncResult
Public Function BeginExecuteNonQuery (callback As AsyncCallback, stateObject As Object) As IAsyncResult
Paraméterek
- callback
- AsyncCallback
Egy AsyncCallback meghatalmazott, amelyet a parancs végrehajtása után hív meg a rendszer. Adja át a null (Nothing a Microsoft Visual Basic)-ban, hogy jelezze, nincs szükség visszahívásra.
- stateObject
- Object
A visszahívási eljárásnak átadott, felhasználó által definiált állapotobjektum. Kérje le ezt az objektumot a visszahívási eljárásból a AsyncState tulajdonság használatával.
Válaszok
Olyan IAsyncResult érték, amely az eredmények lekérdezésére vagy várakozására használható, vagy mindkettőre; erre az értékre a meghíváskor EndExecuteNonQuery(IAsyncResult)is szükség van, amely az érintett sorok számát adja vissza.
Kivételek
A SqlDbTypebináristól vagy a VarBinarytól eltérő függvényt használt a rendszer, amikor Value a beállítás értéke Stream. A streamelésről további információt az SqlClient streamelési támogatásában talál.
-vagy-
A SqlDbTypechar, NChar, NVarChar, VarChar vagy Xml kivételével más is használható volt a beállításnál ValueTextReader.
-vagy-
Az SqlDbTypeXml-fájltól eltérő érték lett használva a ValuebeállításkorXmlReader.
Bármilyen hiba, amely a parancsszöveg végrehajtása során történt.
-vagy-
Időtúllépés történt egy streamelési művelet során. A streamelésről további információt az SqlClient streamelési támogatásában talál.
Az "Aszinkron processing=true" név-érték pár nem szerepel a kapcsolati karakterlánc, amely meghatározza a SqlCommand kapcsolatát.
-vagy-
A SqlConnection streamelési művelet során bezárt vagy elvetett. A streamelésről további információt az SqlClient streamelési támogatásában talál.
Hiba történt egy Stream, XmlReader vagy TextReader objektumban egy streamelési művelet során. A streamelésről további információt az SqlClient streamelési támogatásában talál.
Az Stream, XmlReader vagy TextReader objektum egy streamelési művelet során lett bezárva. A streamelésről további információt az SqlClient streamelési támogatásában talál.
Példák
Az alábbi Windows alkalmazás bemutatja a BeginExecuteNonQuery metódus használatát, és végrehajt egy Transact-SQL utasítást, amely több másodperces késleltetést tartalmaz (hosszú ideig futó parancsot emulál).
Ez a példa számos fontos technikát mutat be. Ez magában foglalja egy metódus meghívását, amely egy külön szálból használja az űrlapot. Ez a példa azt is bemutatja, hogyan kell megakadályoznia, hogy a felhasználók egyszerre többször hajtsanak végre parancsokat, és hogyan kell meggyőződnie arról, hogy az űrlap nem záródik be a visszahívási eljárás meghívása előtt.
A példa beállításához hozzon létre egy új Windows-alkalmazást. Helyezzen egy vezérlőt Button és egy vezérlőt Label az űrlapra (elfogadva az egyes vezérlők alapértelmezett nevét). Adja hozzá az alábbi kódot az űrlap osztályához, és módosítsa a környezethez szükséges kapcsolati karakterlánc.
using System.Data.SqlClient;
namespace Microsoft.AdoDotNet.CodeSamples
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
// Hook up the form's Load event handler (you can double-click on
// the form's design surface in Visual Studio), and then add
// this code to the form's class:
private void Form1_Load(object sender, EventArgs e)
{
this.button1.Click += new System.EventHandler(this.button1_Click);
this.FormClosing += new System.Windows.Forms.
FormClosingEventHandler(this.Form1_FormClosing);
}
// You need this delegate in order to display text from a thread
// other than the form's thread. See the HandleCallback
// procedure for more information.
// This same delegate matches both the DisplayStatus
// and DisplayResults methods.
private delegate void DisplayInfoDelegate(string Text);
// This flag ensures that the user does not attempt
// to restart the command or close the form while the
// asynchronous command is executing.
private bool isExecuting;
// This example maintains the connection object
// externally, so that it is available for closing.
private SqlConnection connection;
private static string GetConnectionString()
{
// To avoid storing the connection string in your code,
// you can retrieve it from a configuration file.
// If you have not included "Asynchronous Processing=true" in the
// connection string, the command is not able
// to execute asynchronously.
return "Data Source=(local);Integrated Security=true;" +
"Initial Catalog=AdventureWorks; Asynchronous Processing=true";
}
private void DisplayStatus(string Text)
{
this.label1.Text = Text;
}
private void DisplayResults(string Text)
{
this.label1.Text = Text;
DisplayStatus("Ready");
}
private void Form1_FormClosing(object sender,
System.Windows.Forms.FormClosingEventArgs e)
{
if (isExecuting)
{
MessageBox.Show(this, "Cannot close the form until " +
"the pending asynchronous command has completed. Please wait...");
e.Cancel = true;
}
}
private void button1_Click(object sender, System.EventArgs e)
{
if (isExecuting)
{
MessageBox.Show(this,
"Already executing. Please wait until the current query " +
"has completed.");
}
else
{
SqlCommand command = null;
try
{
DisplayResults("");
DisplayStatus("Connecting...");
connection = new SqlConnection(GetConnectionString());
// To emulate a long-running query, wait for
// a few seconds before working with the data.
// This command does not do much, but that's the point--
// it does not change your data, in the long run.
string commandText =
"WAITFOR DELAY '0:0:05';" +
"UPDATE Production.Product SET ReorderPoint = ReorderPoint + 1 " +
"WHERE ReorderPoint Is Not Null;" +
"UPDATE Production.Product SET ReorderPoint = ReorderPoint - 1 " +
"WHERE ReorderPoint Is Not Null";
command = new SqlCommand(commandText, connection);
connection.Open();
DisplayStatus("Executing...");
isExecuting = true;
// Although it is not required that you pass the
// SqlCommand object as the second parameter in the
// BeginExecuteNonQuery call, doing so makes it easier
// to call EndExecuteNonQuery in the callback procedure.
AsyncCallback callback = new AsyncCallback(HandleCallback);
command.BeginExecuteNonQuery(callback, command);
}
catch (Exception ex)
{
isExecuting = false;
DisplayStatus(string.Format("Ready (last error: {0})", ex.Message));
if (connection != null)
{
connection.Close();
}
}
}
}
private void HandleCallback(IAsyncResult result)
{
try
{
// Retrieve the original command object, passed
// to this procedure in the AsyncState property
// of the IAsyncResult parameter.
SqlCommand command = (SqlCommand)result.AsyncState;
int rowCount = command.EndExecuteNonQuery(result);
string rowText = " rows affected.";
if (rowCount == 1)
{
rowText = " row affected.";
}
rowText = rowCount + rowText;
// You may not interact with the form and its contents
// from a different thread, and this callback procedure
// is all but guaranteed to be running from a different thread
// than the form. Therefore you cannot simply call code that
// displays the results, like this:
// DisplayResults(rowText)
// Instead, you must call the procedure from the form's thread.
// One simple way to accomplish this is to call the Invoke
// method of the form, which calls the delegate you supply
// from the form's thread.
DisplayInfoDelegate del = new DisplayInfoDelegate(DisplayResults);
this.Invoke(del, rowText);
}
catch (Exception ex)
{
// Because you are now running code in a separate thread,
// if you do not handle the exception here, none of your other
// code catches the exception. Because none of
// your code is on the call stack in this thread, there is nothing
// higher up the stack to catch the exception if you do not
// handle it here. You can either log the exception or
// invoke a delegate (as in the non-error case in this
// example) to display the error on the form. In no case
// can you simply display the error without executing a delegate
// as in the try block here.
// You can create the delegate instance as you
// invoke it, like this:
this.Invoke(new DisplayInfoDelegate(DisplayStatus),
String.Format("Ready(last error: {0}", ex.Message));
}
finally
{
isExecuting = false;
if (connection != null)
{
connection.Close();
}
}
}
}
}
Imports System.Data.SqlClient
Imports System.Windows.Forms
Public Class Form1
' Add this code to the form's class:
' You need this delegate in order to display text from a thread
' other than the form's thread. See the HandleCallback
' procedure for more information.
' This same delegate matches both the DisplayStatus
' and DisplayResults methods.
Private Delegate Sub DisplayInfoDelegate(ByVal Text As String)
' This flag ensures that the user does not attempt
' to restart the command or close the form while the
' asynchronous command is executing.
Private isExecuting As Boolean
' This example maintains the connection object
' externally, so that it is available for closing.
Private connection As SqlConnection
Private Function GetConnectionString() As String
' To avoid storing the connection string in your code,
' you can retrieve it from a configuration file.
' If you have not included "Asynchronous Processing=true" in the
' connection string, the command is not able
' to execute asynchronously.
Return "Data Source=(local);Integrated Security=true;" &
"Initial Catalog=AdventureWorks; Asynchronous Processing=true"
End Function
Private Sub DisplayStatus(ByVal Text As String)
Me.Label1.Text = Text
End Sub
Private Sub DisplayResults(ByVal Text As String)
Me.Label1.Text = Text
DisplayStatus("Ready")
End Sub
Private Sub Form1_FormClosing(ByVal sender As Object,
ByVal e As FormClosingEventArgs) _
Handles Me.FormClosing
If isExecuting Then
MessageBox.Show(Me, "Cannot close the form until " &
"the pending asynchronous command has completed. Please wait...")
e.Cancel = True
End If
End Sub
Private Sub Button1_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles Button1.Click
If isExecuting Then
MessageBox.Show(Me,
"Already executing. Please wait until the current query " &
"has completed.")
Else
Dim command As SqlCommand
Try
DisplayResults("")
DisplayStatus("Connecting...")
connection = New SqlConnection(GetConnectionString())
' To emulate a long-running query, wait for
' a few seconds before working with the data.
' This command does not do much, but that's the point--
' it does not change your data, in the long run.
Dim commandText As String =
"WAITFOR DELAY '0:0:05';" &
"UPDATE Production.Product SET ReorderPoint = ReorderPoint + 1 " &
"WHERE ReorderPoint Is Not Null;" &
"UPDATE Production.Product SET ReorderPoint = ReorderPoint - 1 " &
"WHERE ReorderPoint Is Not Null"
command = New SqlCommand(commandText, connection)
connection.Open()
DisplayStatus("Executing...")
isExecuting = True
' Although it is not required that you pass the
' SqlCommand object as the second parameter in the
' BeginExecuteNonQuery call, doing so makes it easier
' to call EndExecuteNonQuery in the callback procedure.
Dim callback As New AsyncCallback(AddressOf HandleCallback)
command.BeginExecuteNonQuery(callback, command)
Catch ex As Exception
isExecuting = False
DisplayStatus(String.Format("Ready (last error: {0})", ex.Message))
If connection IsNot Nothing Then
connection.Close()
End If
End Try
End If
End Sub
Private Sub HandleCallback(ByVal result As IAsyncResult)
Try
' Retrieve the original command object, passed
' to this procedure in the AsyncState property
' of the IAsyncResult parameter.
Dim command As SqlCommand = CType(result.AsyncState, SqlCommand)
Dim rowCount As Integer = command.EndExecuteNonQuery(result)
Dim rowText As String = " rows affected."
If rowCount = 1 Then
rowText = " row affected."
End If
rowText = rowCount & rowText
' You may not interact with the form and its contents
' from a different thread, and this callback procedure
' is all but guaranteed to be running from a different thread
' than the form. Therefore you cannot simply call code that
' displays the results, like this:
' DisplayResults(rowText)
' Instead, you must call the procedure from the form's thread.
' One simple way to accomplish this is to call the Invoke
' method of the form, which calls the delegate you supply
' from the form's thread.
Dim del As New DisplayInfoDelegate(AddressOf DisplayResults)
Me.Invoke(del, rowText)
Catch ex As Exception
' Because you are now running code in a separate thread,
' if you do not handle the exception here, none of your other
' code catches the exception. Because none of your code
' is on the call stack in this thread, there is nothing
' higher up the stack to catch the exception if you do not
' handle it here. You can either log the exception or
' invoke a delegate (as in the non-error case in this
' example) to display the error on the form. In no case
' can you simply display the error without executing a delegate
' as in the Try block here.
' You can create the delegate instance as you
' invoke it, like this:
Me.Invoke(New DisplayInfoDelegate(AddressOf DisplayStatus),
String.Format("Ready(last error: {0}", ex.Message))
Finally
isExecuting = False
If connection IsNot Nothing Then
connection.Close()
End If
End Try
End Sub
End Class
Megjegyzések
A BeginExecuteNonQuery metódus elindítja egy Transact-SQL utasítás vagy tárolt eljárás aszinkron végrehajtásának folyamatát, amely nem ad vissza sorokat, így a többi feladat párhuzamosan futhat az utasítás végrehajtása közben. Ha az utasítás befejeződött, a fejlesztőknek meg kell hívniuk a EndExecuteNonQuery metódust a művelet befejezéséhez. A BeginExecuteNonQuery metódus azonnal visszatér, de amíg a kód nem hajtja végre a megfelelő EndExecuteNonQuery metódushívást, nem hajthat végre más hívásokat, amelyek szinkron vagy aszinkron végrehajtást indítanak ugyanahhoz SqlCommand az objektumhoz. Ha a EndExecuteNonQuery parancs végrehajtása előtt hívja meg az objektumot, az SqlCommand a végrehajtás befejezéséig blokkolódik.
A callback paraméter lehetővé teszi egy meghatalmazott megadását AsyncCallback , amelyet az utasítás befejezésekor hív meg. A metódust meghívhatja ezen a EndExecuteNonQuery delegálási eljáráson belül, vagy az alkalmazás bármely más helyről. Emellett a paraméter bármely asyncStateObject objektumát átadhatja, a visszahívási eljárás pedig lekérheti ezeket az adatokat a AsyncState tulajdonság használatával.
Vegye figyelembe, hogy a parancs szövegét és paramétereit a rendszer szinkron módon küldi el a kiszolgálónak. Ha nagy parancsot vagy több paramétert küld, ez a módszer blokkolhatja az írások során. A parancs elküldése után a metódus azonnal visszatér, anélkül, hogy választ vár a kiszolgálótól – vagyis az olvasások aszinkronok.
Mivel a visszahívási eljárás a Microsoft .NET közös nyelvi futtatókörnyezet által biztosított háttérszálból történik, nagyon fontos, hogy szigorú megközelítést alkalmazzon a többszálas interakciók alkalmazáson belüli kezelésére. Például nem használhatja az űrlap tartalmát a visszahívási eljáráson belül; ha frissítenie kell az űrlapot, a munka elvégzéséhez vissza kell váltania az űrlap szálára. A jelen témakörben szereplő példa ezt a viselkedést mutatja be.
A művelet végrehajtása során előforduló összes hiba kivételként jelenik meg a visszahívási eljárásban. A kivételt a visszahívási eljárásban kell kezelnie, nem a fő alkalmazásban. A visszahívási eljárás kivételeinek kezelésével kapcsolatos további információkért tekintse meg a jelen témakörben található példát.
Ez a metódus figyelmen kívül hagyja a tulajdonságot CommandTimeout .
Lásd még
- Az adatok összekapcsolása és lekérése az ADO-ban.NET
A .NET-keretrendszer Data Provider használata SQL Server - ADO.NET áttekintése