SqlCommand.Cancel Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Pokusí se zrušit spuštění .SqlCommand
public:
override void Cancel();
public:
virtual void Cancel();
public override void Cancel();
public void Cancel();
override this.Cancel : unit -> unit
abstract member Cancel : unit -> unit
override this.Cancel : unit -> unit
Public Overrides Sub Cancel ()
Public Sub Cancel ()
Implementuje
Příklady
Následující příklad ukazuje použití Cancel metody.
using System;
using System.Data;
using System.Data.SqlClient;
using System.Threading;
class Program
{
private static SqlCommand m_rCommand;
public static SqlCommand Command
{
get { return m_rCommand; }
set { m_rCommand = value; }
}
public static void Thread_Cancel()
{
Command.Cancel();
}
static void Main()
{
string connectionString = GetConnectionString();
try
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
Command = connection.CreateCommand();
Command.CommandText = "DROP TABLE TestCancel";
try
{
Command.ExecuteNonQuery();
}
catch { }
Command.CommandText = "CREATE TABLE TestCancel(co1 int, co2 char(10))";
Command.ExecuteNonQuery();
Command.CommandText = "INSERT INTO TestCancel VALUES (1, '1')";
Command.ExecuteNonQuery();
Command.CommandText = "SELECT * FROM TestCancel";
SqlDataReader reader = Command.ExecuteReader();
Thread rThread2 = new Thread(new ThreadStart(Thread_Cancel));
rThread2.Start();
rThread2.Join();
reader.Read();
System.Console.WriteLine(reader.FieldCount);
reader.Close();
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
static private string GetConnectionString()
{
// To avoid storing the connection string in your code,
// you can retrieve it from a configuration file.
return "Data Source=(local);Initial Catalog=AdventureWorks;"
+ "Integrated Security=SSPI";
}
}
Imports System.Data
Imports System.Data.SqlClient
Imports System.Threading
Module Module1
Private m_rCommand As SqlCommand
Public Property Command() As SqlCommand
Get
Return m_rCommand
End Get
Set(ByVal value As SqlCommand)
m_rCommand = value
End Set
End Property
Public Sub Thread_Cancel()
Command.Cancel()
End Sub
Sub Main()
Dim connectionString As String = GetConnectionString()
Try
Using connection As New SqlConnection(connectionString)
connection.Open()
Command = connection.CreateCommand()
Command.CommandText = "DROP TABLE TestCancel"
Try
Command.ExecuteNonQuery()
Catch
End Try
Command.CommandText = "CREATE TABLE TestCancel(co1 int, co2 char(10))"
Command.ExecuteNonQuery()
Command.CommandText = "INSERT INTO TestCancel VALUES (1, '1')"
Command.ExecuteNonQuery()
Command.CommandText = "SELECT * FROM TestCancel"
Dim reader As SqlDataReader = Command.ExecuteReader()
Dim rThread2 As New Thread( _
New ThreadStart(AddressOf Thread_Cancel))
rThread2.Start()
rThread2.Join()
reader.Read()
Console.WriteLine(reader.FieldCount)
reader.Close()
End Using
Catch ex As Exception
Console.WriteLine(ex.Message)
End Try
End Sub
Private Function GetConnectionString() As String
' To avoid storing the connection string in your code,
' you can retrieve it from a configuration file.
Return "Data Source=(local);Initial Catalog=AdventureWorks;" _
& "Integrated Security=SSPI;"
End Function
End Module
Poznámky
Pokud se nic nezruší, nic se nezruší. Pokud je však v procesu příkaz a pokus o zrušení selže, nevygeneruje se žádná výjimka.
V některých výjimečných případech, pokud voláte ExecuteReader, pak zavoláte Close (implicitně nebo explicitně) před voláním Cancel a potom zavoláte Cancel, příkaz zrušit se neodesílají do SQL Server a sada výsledků může pokračovat ve streamování po volání Close. Abyste tomu předešli, před zavřením čtečky nebo připojení se ujistěte, že voláte Cancel .