[Designer(
"
Microsoft.VSDesigner.Data.VS.SqlCommandDesigner, Microsoft.VSDesigner, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
"
), ToolboxItem(
true
), DefaultEvent(
"
RecordsAffected
"
)]
public
sealed
class
SqlCommand : DbCommand, ICloneable
{
//
Fields
private
SqlConnection _activeConnection;
private
bool
_batchRPCMode;
private
CachedAsyncState _cachedAsyncState;
private
_SqlMetaDataSet _cachedMetaData;
private
string
_commandText;
private
int
_commandTimeout;
private
CommandType _commandType;
private
int
_currentlyExecutingBatch;
private
bool
_designTimeInvisible;
private
bool
_dirty;
private
EXECTYPE _execType;
private
bool
_hiddenPrepare;
private
bool
_inPrepare;
private
SqlNotificationRequest _notification;
private
bool
_notificationAutoEnlist;
private
static
int
_objectTypeCount;
private
SmiEventSink_DeferedProcessing _outParamEventSink;
private
List
<
SqlParameterCollection
>
_parameterCollectionList;
private
SqlParameterCollection _parameters;
private
volatile
bool
_pendingCancel;
private
int
_prepareHandle;
internal
int
_rowsAffected;
private
_SqlRPC[] _rpcArrayOf1;
private
List
<
_SqlRPC
>
_RPCList;
private
CommandEventSink _smiEventSink;
private
SmiRequestExecutor _smiRequest;
private
SmiContext _smiRequestContext;
internal
SqlDependency _sqlDep;
private
_SqlRPC[] _SqlRPCBatchArray;
private
StatementCompletedEventHandler _statementCompletedEventHandler;
private
TdsParserStateObject _stateObj;
private
SqlTransaction _transaction;
private
UpdateRowSource _updatedRowSource;
internal
static
readonly
string
[] KatmaiProcParamsNames;
internal
readonly
int
ObjectID;
internal
static
readonly
string
[] PreKatmaiProcParamsNames;
//
Events
[ResCategory(
"
DataCategory_StatementCompleted
"
), ResDescription(
"
DbCommand_StatementCompleted
"
)]
public
event
StatementCompletedEventHandler StatementCompleted;
//
Methods
static
SqlCommand();
public
SqlCommand();
private
SqlCommand(SqlCommand from);
public
SqlCommand(
string
cmdText);
public
SqlCommand(
string
cmdText, SqlConnection connection);
public
SqlCommand(
string
cmdText, SqlConnection connection, SqlTransaction transaction);
internal
void
AddBatchCommand(
string
commandText, SqlParameterCollection parameters, CommandType cmdType);
[HostProtection(SecurityAction.LinkDemand, ExternalThreading
=
true
)]
public
IAsyncResult BeginExecuteNonQuery();
[HostProtection(SecurityAction.LinkDemand, ExternalThreading
=
true
)]
public
IAsyncResult BeginExecuteNonQuery(AsyncCallback callback,
object
stateObject);
[HostProtection(SecurityAction.LinkDemand, ExternalThreading
=
true
)]
public
IAsyncResult BeginExecuteReader();
[HostProtection(SecurityAction.LinkDemand, ExternalThreading
=
true
)]
public
IAsyncResult BeginExecuteReader(CommandBehavior behavior);
[HostProtection(SecurityAction.LinkDemand, ExternalThreading
=
true
)]
public
IAsyncResult BeginExecuteReader(AsyncCallback callback,
object
stateObject);
[HostProtection(SecurityAction.LinkDemand, ExternalThreading
=
true
)]
public
IAsyncResult BeginExecuteReader(AsyncCallback callback,
object
stateObject, CommandBehavior behavior);
[HostProtection(SecurityAction.LinkDemand, ExternalThreading
=
true
)]
public
IAsyncResult BeginExecuteXmlReader();
[HostProtection(SecurityAction.LinkDemand, ExternalThreading
=
true
)]
public
IAsyncResult BeginExecuteXmlReader(AsyncCallback callback,
object
stateObject);
private
_SqlRPC BuildExecute(
bool
inSchema);
private
void
BuildExecuteSql(CommandBehavior behavior,
string
commandText, SqlParameterCollection parameters,
ref
_SqlRPC rpc);
internal
string
BuildParamList(TdsParser parser, SqlParameterCollection parameters);
private
_SqlRPC BuildPrepare(CommandBehavior behavior);
private
_SqlRPC BuildPrepExec(CommandBehavior behavior);
private
void
BuildRPC(
bool
inSchema, SqlParameterCollection parameters,
ref
_SqlRPC rpc);
private
_SqlRPC BuildUnprepare();
public
override
void
Cancel();
private
void
CheckNotificationStateAndAutoEnlist();
private
void
CheckThrowSNIException();
internal
void
ClearBatchCommand();
public
SqlCommand Clone();
private
SqlDataReader CompleteAsyncExecuteReader();
private
object
CompleteExecuteScalar(SqlDataReader ds,
bool
returnSqlValue);
private
XmlReader CompleteXmlReader(SqlDataReader ds);
private
int
CountSendableParameters(SqlParameterCollection parameters);
protected
override
DbParameter CreateDbParameter();
public
SqlParameter CreateParameter();
internal
void
DeriveParameters();
protected
override
void
Dispose(
bool
disposing);
private
void
DisposeSmiRequest();
public
int
EndExecuteNonQuery(IAsyncResult asyncResult);
public
SqlDataReader EndExecuteReader(IAsyncResult asyncResult);
public
XmlReader EndExecuteXmlReader(IAsyncResult asyncResult);
internal
int
ExecuteBatchRPCCommand();
protected
override
DbDataReader ExecuteDbDataReader(CommandBehavior behavior);
public
override
int
ExecuteNonQuery();
public
SqlDataReader ExecuteReader();
public
SqlDataReader ExecuteReader(CommandBehavior behavior);
internal
SqlDataReader ExecuteReader(CommandBehavior behavior,
string
method);
public
override
object
ExecuteScalar();
internal
void
ExecuteToPipe(SmiContext pipeContext);
public
XmlReader ExecuteXmlReader();
private
void
FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior,
string
resetOptionsString);
private
string
GetCommandText(CommandBehavior behavior);
private
SqlParameterCollection GetCurrentParameterCollection();
internal
SqlException GetErrors(
int
commandIndex);
private
int
GetParameterCount(SqlParameterCollection parameters);
private
SqlParameter GetParameterForOutputValueExtraction(SqlParameterCollection parameters,
string
paramName,
int
paramCount);
internal
int
?
GetRecordsAffected(
int
commandIndex);
private
string
GetResetOptionsString(CommandBehavior behavior);
private
void
GetRPCObject(
int
paramCount,
ref
_SqlRPC rpc);
private
string
GetSetOptionsString(CommandBehavior behavior);
private
void
GetStateObject();
private
IAsyncResult InternalBeginExecuteReader(AsyncCallback callback,
object
stateObject, CommandBehavior behavior);
private
SqlDataReader InternalEndExecuteReader(IAsyncResult asyncResult,
string
endMethod);
private
int
InternalExecuteNonQuery(DbAsyncResult result,
string
methodName,
bool
sendToPipe);
private
SqlDataReader InternalPrepare(CommandBehavior behavior);
private
void
InternalUnprepare(
bool
isClosing);
private
void
NotifyDependency();
internal
void
OnDoneProc();
internal
void
OnParameterAvailableSmi(SmiParameterMetaData metaData, ITypedGettersV3 parameterValues,
int
ordinal);
internal
void
OnParametersAvailableSmi(SmiParameterMetaData[] paramMetaData, ITypedGettersV3 parameterValues);
internal
void
OnReturnStatus(
int
status);
internal
void
OnReturnValue(SqlReturnValue rec);
internal
void
OnStatementCompleted(
int
recordCount);
private
ParameterDirection ParameterDirectionFromOleDbDirection(
short
oledbDirection);
public
override
void
Prepare();
private
void
PropertyChanging();
private
void
PutStateObject();
public
void
ResetCommandTimeout();
private
void
RunExecuteNonQuerySmi(
bool
sendToPipe);
private
void
RunExecuteNonQueryTds(
string
methodName,
bool
async);
internal
SqlDataReader RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior,
bool
returnStream,
string
method);
internal
SqlDataReader RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior,
bool
returnStream,
string
method, DbAsyncResult result);
private
SqlDataReader RunExecuteReaderSmi(CommandBehavior cmdBehavior, RunBehavior runBehavior,
bool
returnStream);
private
SqlDataReader RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior,
bool
returnStream,
bool
async);
private
void
SetUpRPCParameters(_SqlRPC rpc,
int
startCount,
bool
inSchema, SqlParameterCollection parameters);
private
void
SetUpSmiRequest(SqlInternalConnectionSmi innerConnection);
private
static
bool
ShouldSendParameter(SqlParameter p);
private
bool
ShouldSerializeCommandTimeout();
[SecurityPermission(SecurityAction.Assert, Infrastructure
=
true
)]
internal
static
string
SqlNotificationContext();
object
ICloneable.Clone();
internal
void
Unprepare(
bool
isClosing);
private
static
string
UnquoteProcedureName(
string
name,
out
object
groupNumber);
private
static
string
UnquoteProcedurePart(
string
part);
private
void
ValidateAsyncCommand();
private
void
ValidateCommand(
string
method,
bool
async);
private
void
VerifyEndExecuteState(DbAsyncResult dbAsyncResult,
string
endMethod);
private
void
WaitForAsyncResults(IAsyncResult asyncResult);
//
Properties
internal
bool
BatchRPCMode {
get
;
set
; }
private
CachedAsyncState cachedAsyncState {
get
; }
[Editor(
"
Microsoft.VSDesigner.Data.SQL.Design.SqlCommandTextEditor, Microsoft.VSDesigner, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
"
,
"
System.Drawing.Design.UITypeEditor, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
"
), RefreshProperties(RefreshProperties.All), ResCategory(
"
DataCategory_Data
"
), ResDescription(
"
DbCommand_CommandText
"
), DefaultValue(
""
)]
public
override
string
CommandText {
get
;
set
; }
[ResDescription(
"
DbCommand_CommandTimeout
"
), ResCategory(
"
DataCategory_Data
"
)]
public
override
int
CommandTimeout {
get
;
set
; }
[ResCategory(
"
DataCategory_Data
"
), DefaultValue(
1
), ResDescription(
"
DbCommand_CommandType
"
), RefreshProperties(RefreshProperties.All)]
public
override
CommandType CommandType {
get
;
set
; }
[DefaultValue((
string
)
null
), Editor(
"
Microsoft.VSDesigner.Data.Design.DbConnectionEditor, Microsoft.VSDesigner, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
"
,
"
System.Drawing.Design.UITypeEditor, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
"
), ResCategory(
"
DataCategory_Data
"
), ResDescription(
"
DbCommand_Connection
"
)]
public
SqlConnection Connection {
get
;
set
; }
protected
override
DbConnection DbConnection {
get
;
set
; }
protected
override
DbParameterCollection DbParameterCollection {
get
; }
protected
override
DbTransaction DbTransaction {
get
;
set
; }
[DefaultValue(
true
), Browsable(
false
), EditorBrowsable(EditorBrowsableState.Never), DesignOnly(
true
)]
public
override
bool
DesignTimeVisible {
get
;
set
; }
private
CommandEventSink EventSink {
get
; }
internal
int
InternalRecordsAffected {
get
;
set
; }
private
SqlInternalConnectionSmi InternalSmiConnection {
get
; }
private
SqlInternalConnectionTds InternalTdsConnection {
get
; }
internal
bool
IsDirty {
get
;
set
; }
private
bool
IsPrepared {
get
; }
private
bool
IsShiloh {
get
; }
private
bool
IsUserPrepared {
get
; }
internal
_SqlMetaDataSet MetaData {
get
; }
[Browsable(
false
), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), ResCategory(
"
DataCategory_Notification
"
), ResDescription(
"
SqlCommand_Notification
"
)]
public
SqlNotificationRequest Notification {
get
;
set
; }
[DefaultValue(
true
), ResDescription(
"
SqlCommand_NotificationAutoEnlist
"
), ResCategory(
"
DataCategory_Notification
"
)]
public
bool
NotificationAutoEnlist {
get
;
set
; }
private
SmiEventSink_DeferedProcessing OutParamEventSink {
get
; }
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content), ResCategory(
"
DataCategory_Data
"
), ResDescription(
"
DbCommand_Parameters
"
)]
public
SqlParameterCollection Parameters {
get
; }
internal
SqlStatistics Statistics {
get
; }
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), ResDescription(
"
DbCommand_Transaction
"
), Browsable(
false
)]
public
SqlTransaction Transaction {
get
;
set
; }
[ResCategory(
"
DataCategory_Update
"
), DefaultValue(
3
), ResDescription(
"
DbCommand_UpdatedRowSource
"
)]
public
override
UpdateRowSource UpdatedRowSource {
get
;
set
; }
//
Nested Types
private
class
CachedAsyncState
{
//
Fields
private
int
_cachedAsyncCloseCount;
private
SqlConnection _cachedAsyncConnection;
private
SqlDataReader _cachedAsyncReader;
private
DbAsyncResult _cachedAsyncResult;
private
RunBehavior _cachedRunBehavior;
private
string
_cachedSetOptions;
//
Methods
internal
CachedAsyncState();
internal
bool
IsActiveConnectionValid(SqlConnection activeConnection);
[ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
internal
void
ResetAsyncState();
internal
void
SetActiveConnectionAndResult(DbAsyncResult result, SqlConnection activeConnection);
internal
void
SetAsyncReaderState(SqlDataReader ds, RunBehavior runBehavior,
string
optionSettings);
//
Properties
internal
SqlDataReader CachedAsyncReader {
get
; }
internal
RunBehavior CachedRunBehavior {
get
; }
internal
string
CachedSetOptions {
get
; }
internal
bool
PendingAsyncOperation {
get
; }
}
private
sealed
class
CommandEventSink : SmiEventSink_Default
{
//
Fields
private
SqlCommand _command;
//
Methods
internal
CommandEventSink(SqlCommand command);
internal
override
void
BatchCompleted();
internal
override
void
ParameterAvailable(SmiParameterMetaData metaData, SmiTypedGetterSetter parameterValues,
int
ordinal);
internal
override
void
ParametersAvailable(SmiParameterMetaData[] metaData, ITypedGettersV3 parameterValues);
internal
override
void
StatementCompleted(
int
rowsAffected);
}
private
enum
EXECTYPE
{
UNPREPARED,
PREPAREPENDING,
PREPARED
}
}