2016-08-03 10:59:49 +00:00
//------------------------------------------------------------------------------
// <copyright file="TdsEnums.cs" company="Microsoft">
// Copyright (c) Microsoft Corporation. All rights reserved.
// </copyright>
// <owner current="true" primary="true">[....]</owner>
// <owner current="true" primary="false">[....]</owner>
//------------------------------------------------------------------------------
namespace System.Data.SqlClient {
using System ;
using System.Diagnostics ;
/// <devdoc> Class of variables for the Tds connection.
/// </devdoc>
internal static class TdsEnums {
// internal tdsparser constants
public const short SQL_SERVER_VERSION_SEVEN = 7 ;
public const string SQL_PROVIDER_NAME = Common . DbConnectionStringDefaults . ApplicationName ;
public static readonly Decimal SQL_SMALL_MONEY_MIN = new Decimal ( - 214748.3648 ) ;
public static readonly Decimal SQL_SMALL_MONEY_MAX = new Decimal ( 214748.3647 ) ;
// sql debugging constants, sdci is the structure passed in
public const string SDCI_MAPFILENAME = "SqlClientSSDebug" ;
public const byte SDCI_MAX_MACHINENAME = 32 ;
public const byte SDCI_MAX_DLLNAME = 16 ;
public const byte SDCI_MAX_DATA = 255 ;
public const int SQLDEBUG_OFF = 0 ;
public const int SQLDEBUG_ON = 1 ;
public const int SQLDEBUG_CONTEXT = 2 ;
public const string SP_SDIDEBUG = "sp_sdidebug" ;
public static readonly string [ ] SQLDEBUG_MODE_NAMES = new string [ 3 ] {
"off" ,
"on" ,
"context"
} ;
// HACK!!!
// Constant for SqlDbType.SmallVarBinary... store internal variable here instead of on
// SqlDbType so that it is not surfaced to the user!!! Related to dtc and the fact that
// the TransactionManager TDS stream is the only token left that uses VarBinarys instead of
// BigVarBinarys.
public const SqlDbType SmallVarBinary = ( SqlDbType ) ( SqlDbType . Variant ) + 1 ;
// network protocol string constants
public const string TCP = "tcp" ;
public const string NP = "np" ;
public const string RPC = "rpc" ;
public const string BV = "bv" ;
public const string ADSP = "adsp" ;
public const string SPX = "spx" ;
public const string VIA = "via" ;
public const string LPC = "lpc" ;
// network function string contants
public const string INIT_SSPI_PACKAGE = "InitSSPIPackage" ;
public const string INIT_ADAL_PACKAGE = "InitADALPackage" ;
public const string INIT_SESSION = "InitSession" ;
public const string CONNECTION_GET_SVR_USER = "ConnectionGetSvrUser" ;
public const string GEN_CLIENT_CONTEXT = "GenClientContext" ;
// tdsparser packet handling constants
public const byte SOFTFLUSH = 0 ;
public const byte HARDFLUSH = 1 ;
public const byte IGNORE = 2 ;
// header constants
public const int HEADER_LEN = 8 ;
public const int HEADER_LEN_FIELD_OFFSET = 2 ;
public const int YUKON_HEADER_LEN = 12 ; //Yukon headers also include a MARS session id
public const int MARS_ID_OFFSET = 8 ;
public const int HEADERTYPE_QNOTIFICATION = 1 ;
public const int HEADERTYPE_MARS = 2 ;
public const int HEADERTYPE_TRACE = 3 ;
// other various constants
public const int SUCCEED = 1 ;
public const int FAIL = 0 ;
public const short TYPE_SIZE_LIMIT = 8000 ;
public const int MIN_PACKET_SIZE = 512 ;
// Login packet can be no greater than 4k until server sends us env-change
// increasing packet size.
public const int DEFAULT_LOGIN_PACKET_SIZE = 4096 ;
public const int MAX_PRELOGIN_PAYLOAD_LENGTH = 1024 ;
public const int MAX_PACKET_SIZE = 32768 ;
public const int MAX_SERVER_USER_NAME = 256 ; // obtained from luxor
// Severity 0 - 10 indicates informational (non-error) messages
// Severity 11 - 16 indicates errors that can be corrected by user (syntax errors, etc...)
// Severity 17 - 19 indicates failure due to insufficient resources in the server
// (max locks exceeded, not enough memory, other internal server limits reached, etc..)
// Severity 20 - 25 Severe problems with the server, connection terminated.
public const byte MIN_ERROR_CLASS = 11 ; // webdata 100667: This should actually be 11
public const byte MAX_USER_CORRECTABLE_ERROR_CLASS = 16 ;
public const byte FATAL_ERROR_CLASS = 20 ;
// Message types
public const byte MT_SQL = 1 ; // SQL command batch
public const byte MT_LOGIN = 2 ; // Login message for pre-Sphinx (before version 7.0)
public const byte MT_RPC = 3 ; // Remote procedure call
public const byte MT_TOKENS = 4 ; // Table response data stream
public const byte MT_BINARY = 5 ; // Unformatted binary response data (UNUSED)
public const byte MT_ATTN = 6 ; // Attention (break) signal
public const byte MT_BULK = 7 ; // Bulk load data
public const byte MT_FEDAUTH = 8 ; // Authentication token for federated authentication
public const byte MT_CLOSE = 9 ; // Close subchannel (UNUSED)
public const byte MT_ERROR = 10 ; // Protocol error detected
public const byte MT_ACK = 11 ; // Protocol acknowledgement (UNUSED)
public const byte MT_ECHO = 12 ; // Echo data (UNUSED)
public const byte MT_LOGOUT = 13 ; // Logout message (UNUSED)
public const byte MT_TRANS = 14 ; // Transaction Manager Interface
public const byte MT_OLEDB = 15 ; // ? (UNUSED)
public const byte MT_LOGIN7 = 16 ; // Login message for Sphinx (version 7) or later
public const byte MT_SSPI = 17 ; // SSPI message
public const byte MT_PRELOGIN = 18 ; // Pre-login handshake
// Message status bits
public const byte ST_EOM = 0x1 ; // Packet is end-of-message
public const byte ST_AACK = 0x2 ; // Packet acknowledges attention (server to client)
public const byte ST_IGNORE = 0x2 ; // Ignore this event (client to server)
public const byte ST_BATCH = 0x4 ; // Message is part of a batch.
public const byte ST_RESET_CONNECTION = 0x8 ; // Exec sp_reset_connection prior to processing message
public const byte ST_RESET_CONNECTION_PRESERVE_TRANSACTION = 0x10 ; // reset prior to processing, with preserving local tx
// TDS control tokens
public const byte SQLCOLFMT = 0xa1 ;
public const byte SQLPROCID = 0x7c ;
public const byte SQLCOLNAME = 0xa0 ;
public const byte SQLTABNAME = 0xa4 ;
public const byte SQLCOLINFO = 0xa5 ;
public const byte SQLALTNAME = 0xa7 ;
public const byte SQLALTFMT = 0xa8 ;
public const byte SQLERROR = 0xaa ;
public const byte SQLINFO = 0xab ;
public const byte SQLRETURNVALUE = 0xac ;
public const byte SQLRETURNSTATUS = 0x79 ;
public const byte SQLRETURNTOK = 0xdb ;
public const byte SQLALTCONTROL = 0xaf ;
public const byte SQLROW = 0xd1 ;
public const byte SQLNBCROW = 0xd2 ; // same as ROW with null-bit-compression support
public const byte SQLALTROW = 0xd3 ;
public const byte SQLDONE = 0xfd ;
public const byte SQLDONEPROC = 0xfe ;
public const byte SQLDONEINPROC = 0xff ;
public const byte SQLOFFSET = 0x78 ;
public const byte SQLORDER = 0xa9 ;
public const byte SQLDEBUG_CMD = 0x60 ;
public const byte SQLLOGINACK = 0xad ;
public const byte SQLFEATUREEXTACK = 0xae ; // TDS 7.4 - feature ack
public const byte SQLSESSIONSTATE = 0xe4 ; // TDS 7.4 - connection resiliency session state
public const byte SQLENVCHANGE = 0xe3 ; // Environment change notification
public const byte SQLSECLEVEL = 0xed ; // Security level token ???
public const byte SQLROWCRC = 0x39 ; // ROWCRC datastream???
public const byte SQLCOLMETADATA = 0x81 ; // Column metadata including name
public const byte SQLALTMETADATA = 0x88 ; // Alt column metadata including name
public const byte SQLSSPI = 0xed ; // SSPI data
public const byte SQLFEDAUTHINFO = 0xee ; // Info for client to generate fed auth token
// Environment change notification streams
// TYPE on TDS ENVCHANGE token stream (from sql\ntdbms\include\odsapi.h)
//
public const byte ENV_DATABASE = 1 ; // Database changed
public const byte ENV_LANG = 2 ; // Language changed
public const byte ENV_CHARSET = 3 ; // Character set changed
public const byte ENV_PACKETSIZE = 4 ; // Packet size changed
public const byte ENV_LOCALEID = 5 ; // Unicode data sorting locale id
public const byte ENV_COMPFLAGS = 6 ; // Unicode data sorting comparison flags
public const byte ENV_COLLATION = 7 ; // SQL Collation
// The following are environment change tokens valid for Yukon or later.
public const byte ENV_BEGINTRAN = 8 ; // Transaction began
public const byte ENV_COMMITTRAN = 9 ; // Transaction committed
public const byte ENV_ROLLBACKTRAN = 10 ; // Transaction rolled back
public const byte ENV_ENLISTDTC = 11 ; // Enlisted in Distributed Transaction
public const byte ENV_DEFECTDTC = 12 ; // Defected from Distributed Transaction
public const byte ENV_LOGSHIPNODE = 13 ; // Realtime Log shipping primary node
public const byte ENV_PROMOTETRANSACTION = 15 ; // Promote Transaction
public const byte ENV_TRANSACTIONMANAGERADDRESS = 16 ; // Transaction Manager Address
public const byte ENV_TRANSACTIONENDED = 17 ; // Transaction Ended
public const byte ENV_SPRESETCONNECTIONACK = 18 ; // SP_Reset_Connection ack
public const byte ENV_USERINSTANCE = 19 ; // User Instance
public const byte ENV_ROUTING = 20 ; // Routing (ROR) information
// done status stream bit masks
public const int DONE_MORE = 0x0001 ; // more command results coming
public const int DONE_ERROR = 0x0002 ; // error in command batch
public const int DONE_INXACT = 0x0004 ; // transaction in progress
public const int DONE_PROC = 0x0008 ; // done from stored proc
public const int DONE_COUNT = 0x0010 ; // count in done info
public const int DONE_ATTN = 0x0020 ; // oob ack
public const int DONE_INPROC = 0x0040 ; // like DONE_PROC except proc had error
public const int DONE_RPCINBATCH = 0x0080 ; // Done from RPC in batch
public const int DONE_SRVERROR = 0x0100 ; // Severe error in which resultset should be discarded
public const int DONE_FMTSENT = 0x8000 ; // fmt message sent, done_inproc req'd
// Feature Extension
public const byte FEATUREEXT_TERMINATOR = 0xFF ;
public const byte FEATUREEXT_SRECOVERY = 0x01 ;
public const byte FEATUREEXT_FEDAUTH = 0x02 ;
public const byte FEATUREEXT_TCE = 0x04 ;
public const byte FEATUREEXT_GLOBALTRANSACTIONS = 0x05 ;
[Flags]
public enum FeatureExtension : uint {
None = 0 ,
SessionRecovery = 1 ,
FedAuth = 2 ,
Tce = 4 ,
GlobalTransactions = 8 ,
}
public const byte FEDAUTHLIB_LIVEID = 0X00 ;
public const byte FEDAUTHLIB_SECURITYTOKEN = 0x01 ;
public const byte FEDAUTHLIB_ADAL = 0x02 ;
public const byte FEDAUTHLIB_RESERVED = 0X7F ;
public enum FedAuthLibrary : byte {
LiveId = FEDAUTHLIB_LIVEID ,
SecurityToken = FEDAUTHLIB_SECURITYTOKEN ,
ADAL = FEDAUTHLIB_ADAL ,
Default = FEDAUTHLIB_RESERVED
}
public const byte ADALWORKFLOW_ACTIVEDIRECTORYPASSWORD = 0x01 ;
public const byte ADALWORKFLOW_ACTIVEDIRECTORYINTEGRATED = 0x02 ;
public enum ActiveDirectoryWorkflow : byte {
Password = ADALWORKFLOW_ACTIVEDIRECTORYPASSWORD ,
Integrated = ADALWORKFLOW_ACTIVEDIRECTORYINTEGRATED ,
}
// The string used for username in the error message when Authentication = Active Directory Integrated with FedAuth is used, if authentication fails.
public const string NTAUTHORITYANONYMOUSLOGON = @"NT Authority\Anonymous Logon" ;
// Loginrec defines
public const byte MAX_LOG_NAME = 30 ; // TDS 4.2 login rec max name length
public const byte MAX_PROG_NAME = 10 ; // max length of loginrec progran name
public const byte SEC_COMP_LEN = 8 ; // length of security compartments
public const byte MAX_PK_LEN = 6 ; // max length of TDS packet size
public const byte MAX_NIC_SIZE = 6 ; // The size of a MAC or client address
public const byte SQLVARIANT_SIZE = 2 ; // size of the fixed portion of a sql variant (type, cbPropBytes)
public const byte VERSION_SIZE = 4 ; // size of the tds version (4 unsigned bytes)
public const int CLIENT_PROG_VER = 0x06000000 ; // Client interface version
public const int YUKON_LOG_REC_FIXED_LEN = 0x5e ;
// misc
public const int TEXT_TIME_STAMP_LEN = 8 ;
public const int COLLATION_INFO_LEN = 4 ;
/ *
public const byte INT4_LSB_HI = 0 ; // lsb is low byte (eg 68000)
// public const byte INT4_LSB_LO = 1; // lsb is low byte (eg VAX)
public const byte INT2_LSB_HI = 2 ; // lsb is low byte (eg 68000)
// public const byte INT2_LSB_LO = 3; // lsb is low byte (eg VAX)
public const byte FLT_IEEE_HI = 4 ; // lsb is low byte (eg 68000)
public const byte CHAR_ASCII = 6 ; // ASCII character set
public const byte TWO_I4_LSB_HI = 8 ; // lsb is low byte (eg 68000
// public const byte TWO_I4_LSB_LO = 9; // lsb is low byte (eg VAX)
// public const byte FLT_IEEE_LO = 10; // lsb is low byte (eg MSDOS)
public const byte FLT4_IEEE_HI = 12 ; // IEEE 4-byte floating point -lsb is high byte
// public const byte FLT4_IEEE_LO = 13; // IEEE 4-byte floating point -lsb is low byte
public const byte TWO_I2_LSB_HI = 16 ; // lsb is high byte
// public const byte TWO_I2_LSB_LO = 17; // lsb is low byte
public const byte LDEFSQL = 0 ; // server sends its default
public const byte LDEFUSER = 0 ; // regular old user
public const byte LINTEGRATED = 8 ; // integrated security login
* /
/ * Versioning scheme table :
Client sends :
0x70000000 - > Sphinx
0x71000000 - > Shiloh RTM
0x71000001 - > Shiloh SP1
0x72 xx0002 - > Yukon RTM
Server responds :
0x07000000 - > Sphinx // Notice server response format is different for bwd compat
0x07010000 - > Shiloh RTM // Notice server response format is different for bwd compat
0x71000001 - > Shiloh SP1
0x72 xx0002 - > Yukon RTM
* /
// Pre Shiloh SP1 versioning scheme:
public const int SPHINXORSHILOH_MAJOR = 0x07 ; // The high byte (b3) is not sufficient to distinguish
public const int SPHINX_INCREMENT = 0x00 ; // Sphinx and Shiloh
public const int SHILOH_INCREMENT = 0x01 ; // So we need to look at the high-mid byte (b2) as well
public const int DEFAULT_MINOR = 0x0000 ;
// Shiloh SP1 and beyond versioning scheme:
// Majors:
public const int SHILOHSP1_MAJOR = 0x71 ; // For Shiloh SP1 and later the versioning schema changed and
public const int YUKON_MAJOR = 0x72 ; // the high-byte is sufficient to distinguish later versions
public const int KATMAI_MAJOR = 0x73 ;
public const int DENALI_MAJOR = 0x74 ;
// Increments:
public const int SHILOHSP1_INCREMENT = 0x00 ;
public const int YUKON_INCREMENT = 0x09 ;
public const int KATMAI_INCREMENT = 0x0b ;
public const int DENALI_INCREMENT = 0x00 ;
// Minors:
public const int SHILOHSP1_MINOR = 0x0001 ;
public const int YUKON_RTM_MINOR = 0x0002 ;
public const int KATMAI_MINOR = 0x0003 ;
public const int DENALI_MINOR = 0x0004 ;
public const int ORDER_68000 = 1 ;
public const int USE_DB_ON = 1 ;
public const int INIT_DB_FATAL = 1 ;
public const int SET_LANG_ON = 1 ;
public const int INIT_LANG_FATAL = 1 ;
public const int ODBC_ON = 1 ;
public const int SSPI_ON = 1 ;
public const int REPL_ON = 3 ;
// send the read-only intent to the server
public const int READONLY_INTENT_ON = 1 ;
// Token masks
public const byte SQLLenMask = 0x30 ; // mask to check for length tokens
public const byte SQLFixedLen = 0x30 ; // Mask to check for fixed token
public const byte SQLVarLen = 0x20 ; // Value to check for variable length token
public const byte SQLZeroLen = 0x10 ; // Value to check for zero length token
public const byte SQLVarCnt = 0x00 ; // Value to check for variable count token
// Token masks for COLINFO status
public const byte SQLDifferentName = 0x20 ; // column name different than select list name
public const byte SQLExpression = 0x4 ; // column was result of an expression
public const byte SQLKey = 0x8 ; // column is part of the key for the table
public const byte SQLHidden = 0x10 ; // column not part of select list but added because part of key
// Token masks for COLMETADATA flags
// first byte
public const byte Nullable = 0x1 ;
public const byte Identity = 0x10 ;
public const byte Updatability = 0xb ; // mask off bits 3 and 4
// second byte
public const byte ClrFixedLen = 0x1 ; // Fixed length CLR type
public const byte IsColumnSet = 0x4 ; // Column is an XML representation of an aggregation of other columns
public const byte IsEncrypted = 0x8 ; // Column is encrypted using TCE
// null values
public const uint VARLONGNULL = 0xffffffff ; // null value for text and image types
public const int VARNULL = 0xffff ; // null value for character and binary types
public const int MAXSIZE = 8000 ; // max size for any column
public const byte FIXEDNULL = 0 ;
public const UInt64 UDTNULL = 0xffffffffffffffff ;
// SQL Server Data Type Tokens.
public const int SQLVOID = 0x1f ;
public const int SQLTEXT = 0x23 ;
public const int SQLVARBINARY = 0x25 ;
public const int SQLINTN = 0x26 ;
public const int SQLVARCHAR = 0x27 ;
public const int SQLBINARY = 0x2d ;
public const int SQLIMAGE = 0x22 ;
public const int SQLCHAR = 0x2f ;
public const int SQLINT1 = 0x30 ;
public const int SQLBIT = 0x32 ;
public const int SQLINT2 = 0x34 ;
public const int SQLINT4 = 0x38 ;
public const int SQLMONEY = 0x3c ;
public const int SQLDATETIME = 0x3d ;
public const int SQLFLT8 = 0x3e ;
public const int SQLFLTN = 0x6d ;
public const int SQLMONEYN = 0x6e ;
public const int SQLDATETIMN = 0x6f ;
public const int SQLFLT4 = 0x3b ;
public const int SQLMONEY4 = 0x7a ;
public const int SQLDATETIM4 = 0x3a ;
public const int SQLDECIMALN = 0x6a ;
public const int SQLNUMERICN = 0x6c ;
public const int SQLUNIQUEID = 0x24 ;
public const int SQLBIGCHAR = 0xaf ;
public const int SQLBIGVARCHAR = 0xa7 ;
public const int SQLBIGBINARY = 0xad ;
public const int SQLBIGVARBINARY = 0xa5 ;
public const int SQLBITN = 0x68 ;
public const int SQLNCHAR = 0xef ;
public const int SQLNVARCHAR = 0xe7 ;
public const int SQLNTEXT = 0x63 ;
public const int SQLUDT = 0xF0 ;
// aggregate operator type TDS tokens, used by compute statements:
public const int AOPCNTB = 0x09 ;
public const int AOPSTDEV = 0x30 ;
public const int AOPSTDEVP = 0x31 ;
public const int AOPVAR = 0x32 ;
public const int AOPVARP = 0x33 ;
public const int AOPCNT = 0x4b ;
public const int AOPSUM = 0x4d ;
public const int AOPAVG = 0x4f ;
public const int AOPMIN = 0x51 ;
public const int AOPMAX = 0x52 ;
public const int AOPANY = 0x53 ;
public const int AOPNOOP = 0x56 ;
// SQL Server user-defined type tokens we care about
public const int SQLTIMESTAMP = 0x50 ;
public const int MAX_NUMERIC_LEN = 0x11 ; // 17 bytes of data for max numeric/decimal length
public const int DEFAULT_NUMERIC_PRECISION = 0x1D ; // 29 is the default max numeric precision(Decimal.MaxValue) if not user set
public const int SPHINX_DEFAULT_NUMERIC_PRECISION = 0x1C ; // 28 is the default max numeric precision for Sphinx(Decimal.MaxValue doesn't work for sphinx)
public const int MAX_NUMERIC_PRECISION = 0x26 ; // 38 is max numeric precision;
public const byte UNKNOWN_PRECISION_SCALE = 0xff ; // -1 is value for unknown precision or scale
// The following datatypes are specific to SHILOH (version 8) and later.
public const int SQLINT8 = 0x7f ;
public const int SQLVARIANT = 0x62 ;
// The following datatypes are specific to Yukon (version 9) or later
public const int SQLXMLTYPE = 0xf1 ;
public const int XMLUNICODEBOM = 0xfeff ;
public static readonly byte [ ] XMLUNICODEBOMBYTES = { 0xff , 0xfe } ;
// The following datatypes are specific to Katmai (version 10) or later
public const int SQLTABLE = 0xf3 ;
public const int SQLDATE = 0x28 ;
public const int SQLTIME = 0x29 ;
public const int SQLDATETIME2 = 0x2a ;
public const int SQLDATETIMEOFFSET = 0x2b ;
public const int DEFAULT_VARTIME_SCALE = 7 ;
//Partially length prefixed datatypes constants. These apply to XMLTYPE, BIGVARCHRTYPE,
// NVARCHARTYPE, and BIGVARBINTYPE. Valid for Yukon or later
public const ulong SQL_PLP_NULL = 0xffffffffffffffff ; // Represents null value
public const ulong SQL_PLP_UNKNOWNLEN = 0xfffffffffffffffe ; // Data coming in chunks, total length unknown
public const int SQL_PLP_CHUNK_TERMINATOR = 0x00000000 ; // Represents end of chunked data.
public const ushort SQL_USHORTVARMAXLEN = 0xffff ; // Second ushort in TDS stream is this value if one of max types
// TVPs require some new in-value control tokens:
public const byte TVP_ROWCOUNT_ESTIMATE = 0x12 ;
public const byte TVP_ROW_TOKEN = 0x01 ;
public const byte TVP_END_TOKEN = 0x00 ;
public const ushort TVP_NOMETADATA_TOKEN = 0xFFFF ;
public const byte TVP_ORDER_UNIQUE_TOKEN = 0x10 ;
// TvpColumnMetaData flags
public const int TVP_DEFAULT_COLUMN = 0x200 ;
// TVP_ORDER_UNIQUE_TOKEN flags
public const byte TVP_ORDERASC_FLAG = 0x1 ;
public const byte TVP_ORDERDESC_FLAG = 0x2 ;
public const byte TVP_UNIQUE_FLAG = 0x4 ;
public const bool Is68K = false ;
public const bool TraceTDS = false ;
// RPC function names
public const string SP_EXECUTESQL = "sp_executesql" ; // used against 7.0 servers
public const string SP_PREPEXEC = "sp_prepexec" ; // used against 7.5 servers
public const string SP_PREPARE = "sp_prepare" ; // used against 7.0 servers
public const string SP_EXECUTE = "sp_execute" ;
public const string SP_UNPREPARE = "sp_unprepare" ;
public const string SP_PARAMS = "sp_procedure_params_rowset" ;
public const string SP_PARAMS_MANAGED = "sp_procedure_params_managed" ;
public const string SP_PARAMS_MGD10 = "sp_procedure_params_100_managed" ;
// RPC ProcID's
// NOTE: It is more efficient to call these procs using ProcID's instead of names
public const ushort RPC_PROCID_CURSOR = 1 ;
public const ushort RPC_PROCID_CURSOROPEN = 2 ;
public const ushort RPC_PROCID_CURSORPREPARE = 3 ;
public const ushort RPC_PROCID_CURSOREXECUTE = 4 ;
public const ushort RPC_PROCID_CURSORPREPEXEC = 5 ;
public const ushort RPC_PROCID_CURSORUNPREPARE = 6 ;
public const ushort RPC_PROCID_CURSORFETCH = 7 ;
public const ushort RPC_PROCID_CURSOROPTION = 8 ;
public const ushort RPC_PROCID_CURSORCLOSE = 9 ;
public const ushort RPC_PROCID_EXECUTESQL = 10 ;
public const ushort RPC_PROCID_PREPARE = 11 ;
public const ushort RPC_PROCID_EXECUTE = 12 ;
public const ushort RPC_PROCID_PREPEXEC = 13 ;
public const ushort RPC_PROCID_PREPEXECRPC = 14 ;
public const ushort RPC_PROCID_UNPREPARE = 15 ;
// For Transactions
public const string TRANS_BEGIN = "BEGIN TRANSACTION" ;
public const string TRANS_COMMIT = "COMMIT TRANSACTION" ;
public const string TRANS_ROLLBACK = "ROLLBACK TRANSACTION" ;
public const string TRANS_IF_ROLLBACK = "IF @@TRANCOUNT > 0 ROLLBACK TRANSACTION" ;
public const string TRANS_SAVE = "SAVE TRANSACTION" ;
// For Transactions - isolation levels
public const string TRANS_READ_COMMITTED = "SET TRANSACTION ISOLATION LEVEL READ COMMITTED" ;
public const string TRANS_READ_UNCOMMITTED = "SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED" ;
public const string TRANS_REPEATABLE_READ = "SET TRANSACTION ISOLATION LEVEL REPEATABLE READ" ;
public const string TRANS_SERIALIZABLE = "SET TRANSACTION ISOLATION LEVEL SERIALIZABLE" ;
public const string TRANS_SNAPSHOT = "SET TRANSACTION ISOLATION LEVEL SNAPSHOT" ;
// Batch RPC flags
public const byte SHILOH_RPCBATCHFLAG = 0x80 ;
public const byte YUKON_RPCBATCHFLAG = 0xFF ;
// RPC flags
public const byte RPC_RECOMPILE = 0x1 ;
public const byte RPC_NOMETADATA = 0x2 ;
// RPC parameter class
public const byte RPC_PARAM_BYREF = 0x1 ;
public const byte RPC_PARAM_DEFAULT = 0x2 ;
public const byte RPC_PARAM_ENCRYPTED = 0x8 ;
// SQL parameter list text
public const string PARAM_OUTPUT = "output" ;
// SQL Parameter constants
public const int MAX_PARAMETER_NAME_LENGTH = 128 ;
// metadata options (added around an existing sql statement)
// prefixes
public const string FMTONLY_ON = " SET FMTONLY ON;" ;
public const string FMTONLY_OFF = " SET FMTONLY OFF;" ;
// suffixes
public const string BROWSE_ON = " SET NO_BROWSETABLE ON;" ;
public const string BROWSE_OFF = " SET NO_BROWSETABLE OFF;" ;
// generic table name
public const string TABLE = "Table" ;
public const int EXEC_THRESHOLD = 0x3 ; // if the number of commands we execute is > than this threshold, than do prep/exec/unprep instead
// of executesql.
// dbnetlib error values
public const short TIMEOUT_EXPIRED = - 2 ;
public const short ENCRYPTION_NOT_SUPPORTED = 20 ;
// CAUTION: These are not error codes returned by SNI. This is used for backward compatibility
// since netlib (now removed from sqlclient) returned these codes.
// SQL error values (from sqlerrorcodes.h)
public const int LOGON_FAILED = 18456 ;
public const int PASSWORD_EXPIRED = 18488 ;
public const int IMPERSONATION_FAILED = 1346 ;
public const int P_TOKENTOOLONG = 103 ;
2016-11-10 13:04:39 +00:00
// SQL error that indicates retry for Always Encrypted
public const int TCE_CONVERSION_ERROR_CLIENT_RETRY = 33514 ;
2016-08-03 10:59:49 +00:00
// SNI\Win32 error values
// NOTE: these are simply windows system error codes, not SNI specific
public const uint SNI_UNINITIALIZED = unchecked ( ( uint ) - 1 ) ;
public const uint SNI_SUCCESS = 0 ; // The operation completed successfully.
public const uint SNI_WAIT_TIMEOUT = 258 ; // The wait operation timed out.
public const uint SNI_SUCCESS_IO_PENDING = 997 ; // Overlapped I/O operation is in progress.
// Windows Sockets Error Codes
public const short SNI_WSAECONNRESET = 10054 ; // An existing connection was forcibly closed by the remote host.
// SNI flags
public const UInt32 SNI_SSL_VALIDATE_CERTIFICATE = 1 ; // This enables validation of server certificate
public const UInt32 SNI_SSL_USE_SCHANNEL_CACHE = 2 ; // This enables schannel session cache
public const UInt32 SNI_SSL_IGNORE_CHANNEL_BINDINGS = 0x10 ; // Used with SSL Provider, sent to SNIAddProvider in case of SQL Authentication & Encrypt.
public const string DEFAULT_ENGLISH_CODE_PAGE_STRING = "iso_1" ;
public const short DEFAULT_ENGLISH_CODE_PAGE_VALUE = 1252 ;
public const short CHARSET_CODE_PAGE_OFFSET = 2 ;
internal const int MAX_SERVERNAME = 255 ;
// Sql Statement Tokens in the DONE packet
// (see ntdbms\ntinc\tokens.h)
//
internal const ushort SELECT = 0xc1 ;
internal const ushort INSERT = 0xc3 ;
internal const ushort DELETE = 0xc4 ;
internal const ushort UPDATE = 0xc5 ;
internal const ushort ABORT = 0xd2 ;
internal const ushort BEGINXACT = 0xd4 ;
internal const ushort ENDXACT = 0xd5 ;
internal const ushort BULKINSERT = 0xf0 ;
internal const ushort OPENCURSOR = 0x20 ;
internal const ushort MERGE = 0x117 ;
// Login data validation Rules
//
internal const ushort MAXLEN_HOSTNAME = 128 ; // the client machine name
internal const ushort MAXLEN_USERNAME = 128 ; // the client user id
internal const ushort MAXLEN_PASSWORD = 128 ; // the password supplied by the client
internal const ushort MAXLEN_APPNAME = 128 ; // the client application name
internal const ushort MAXLEN_SERVERNAME = 128 ; // the server name
internal const ushort MAXLEN_CLIENTINTERFACE = 128 ; // the interface library name
internal const ushort MAXLEN_LANGUAGE = 128 ; // the initial language
internal const ushort MAXLEN_DATABASE = 128 ; // the initial database
internal const ushort MAXLEN_ATTACHDBFILE = 260 ; // the filename for a database that is to be attached during the connection process
internal const ushort MAXLEN_NEWPASSWORD = 128 ; // new password for the specified login.
// array copied directly from tdssort.h from luxor
public static readonly UInt16 [ ] CODE_PAGE_FROM_SORT_ID = {
0 , /* 0 */
0 , /* 1 */
0 , /* 2 */
0 , /* 3 */
0 , /* 4 */
0 , /* 5 */
0 , /* 6 */
0 , /* 7 */
0 , /* 8 */
0 , /* 9 */
0 , /* 10 */
0 , /* 11 */
0 , /* 12 */
0 , /* 13 */
0 , /* 14 */
0 , /* 15 */
0 , /* 16 */
0 , /* 17 */
0 , /* 18 */
0 , /* 19 */
0 , /* 20 */
0 , /* 21 */
0 , /* 22 */
0 , /* 23 */
0 , /* 24 */
0 , /* 25 */
0 , /* 26 */
0 , /* 27 */
0 , /* 28 */
0 , /* 29 */
437 , /* 30 */
437 , /* 31 */
437 , /* 32 */
437 , /* 33 */
437 , /* 34 */
0 , /* 35 */
0 , /* 36 */
0 , /* 37 */
0 , /* 38 */
0 , /* 39 */
850 , /* 40 */
850 , /* 41 */
850 , /* 42 */
850 , /* 43 */
850 , /* 44 */
0 , /* 45 */
0 , /* 46 */
0 , /* 47 */
0 , /* 48 */
850 , /* 49 */
1252 , /* 50 */
1252 , /* 51 */
1252 , /* 52 */
1252 , /* 53 */
1252 , /* 54 */
850 , /* 55 */
850 , /* 56 */
850 , /* 57 */
850 , /* 58 */
850 , /* 59 */
850 , /* 60 */
850 , /* 61 */
0 , /* 62 */
0 , /* 63 */
0 , /* 64 */
0 , /* 65 */
0 , /* 66 */
0 , /* 67 */
0 , /* 68 */
0 , /* 69 */
0 , /* 70 */
1252 , /* 71 */
1252 , /* 72 */
1252 , /* 73 */
1252 , /* 74 */
1252 , /* 75 */
0 , /* 76 */
0 , /* 77 */
0 , /* 78 */
0 , /* 79 */
1250 , /* 80 */
1250 , /* 81 */
1250 , /* 82 */
1250 , /* 83 */
1250 , /* 84 */
1250 , /* 85 */
1250 , /* 86 */
1250 , /* 87 */
1250 , /* 88 */
1250 , /* 89 */
1250 , /* 90 */
1250 , /* 91 */
1250 , /* 92 */
1250 , /* 93 */
1250 , /* 94 */
1250 , /* 95 */
1250 , /* 96 */
1250 , /* 97 */
1250 , /* 98 */
0 , /* 99 */
0 , /* 100 */
0 , /* 101 */
0 , /* 102 */
0 , /* 103 */
1251 , /* 104 */
1251 , /* 105 */
1251 , /* 106 */
1251 , /* 107 */
1251 , /* 108 */
0 , /* 109 */
0 , /* 110 */
0 , /* 111 */
1253 , /* 112 */
1253 , /* 113 */
1253 , /* 114 */
0 , /* 115 */
0 , /* 116 */
0 , /* 117 */
0 , /* 118 */
0 , /* 119 */
1253 , /* 120 */
1253 , /* 121 */
1253 , /* 122 */
0 , /* 123 */
1253 , /* 124 */
0 , /* 125 */
0 , /* 126 */
0 , /* 127 */
1254 , /* 128 */
1254 , /* 129 */
1254 , /* 130 */
0 , /* 131 */
0 , /* 132 */
0 , /* 133 */
0 , /* 134 */
0 , /* 135 */
1255 , /* 136 */
1255 , /* 137 */
1255 , /* 138 */
0 , /* 139 */
0 , /* 140 */
0 , /* 141 */
0 , /* 142 */
0 , /* 143 */
1256 , /* 144 */
1256 , /* 145 */
1256 , /* 146 */
0 , /* 147 */
0 , /* 148 */
0 , /* 149 */
0 , /* 150 */
0 , /* 151 */
1257 , /* 152 */
1257 , /* 153 */
1257 , /* 154 */
1257 , /* 155 */
1257 , /* 156 */
1257 , /* 157 */
1257 , /* 158 */
1257 , /* 159 */
1257 , /* 160 */
0 , /* 161 */
0 , /* 162 */
0 , /* 163 */
0 , /* 164 */
0 , /* 165 */
0 , /* 166 */
0 , /* 167 */
0 , /* 168 */
0 , /* 169 */
0 , /* 170 */
0 , /* 171 */
0 , /* 172 */
0 , /* 173 */
0 , /* 174 */
0 , /* 175 */
0 , /* 176 */
0 , /* 177 */
0 , /* 178 */
0 , /* 179 */
0 , /* 180 */
0 , /* 181 */
0 , /* 182 */
1252 , /* 183 */
1252 , /* 184 */
1252 , /* 185 */
1252 , /* 186 */
0 , /* 187 */
0 , /* 188 */
0 , /* 189 */
0 , /* 190 */
0 , /* 191 */
932 , /* 192 */
932 , /* 193 */
949 , /* 194 */
949 , /* 195 */
950 , /* 196 */
950 , /* 197 */
936 , /* 198 */
936 , /* 199 */
932 , /* 200 */
949 , /* 201 */
950 , /* 202 */
936 , /* 203 */
874 , /* 204 */
874 , /* 205 */
874 , /* 206 */
0 , /* 207 */
0 , /* 208 */
0 , /* 209 */
1252 , /* 210 */
1252 , /* 211 */
1252 , /* 212 */
1252 , /* 213 */
1252 , /* 214 */
1252 , /* 215 */
1252 , /* 216 */
1252 , /* 217 */
0 , /* 218 */
0 , /* 219 */
0 , /* 220 */
0 , /* 221 */
0 , /* 222 */
0 , /* 223 */
0 , /* 224 */
0 , /* 225 */
0 , /* 226 */
0 , /* 227 */
0 , /* 228 */
0 , /* 229 */
0 , /* 230 */
0 , /* 231 */
0 , /* 232 */
0 , /* 233 */
0 , /* 234 */
0 , /* 235 */
0 , /* 236 */
0 , /* 237 */
0 , /* 238 */
0 , /* 239 */
0 , /* 240 */
0 , /* 241 */
0 , /* 242 */
0 , /* 243 */
0 , /* 244 */
0 , /* 245 */
0 , /* 246 */
0 , /* 247 */
0 , /* 248 */
0 , /* 249 */
0 , /* 250 */
0 , /* 251 */
0 , /* 252 */
0 , /* 253 */
0 , /* 254 */
0 , /* 255 */
} ;
internal enum UDTFormatType {
Native = 1 ,
UserDefined = 2
}
internal enum TransactionManagerRequestType {
GetDTCAddress = 0 ,
Propagate = 1 ,
Begin = 5 ,
Promote = 6 ,
Commit = 7 ,
Rollback = 8 ,
Save = 9
} ;
internal enum TransactionManagerIsolationLevel {
Unspecified = 0x00 ,
ReadUncommitted = 0x01 ,
ReadCommitted = 0x02 ,
RepeatableRead = 0x03 ,
Serializable = 0x04 ,
Snapshot = 0x05
}
internal enum GenericType {
MultiSet = 131 ,
} ;
// Date, Time, DateTime2, DateTimeOffset specific constants
internal static readonly Int64 [ ] TICKS_FROM_SCALE = {
10000000 ,
1000000 ,
100000 ,
10000 ,
1000 ,
100 ,
10 ,
1 ,
} ;
internal const int MAX_TIME_SCALE = 7 ; // Maximum scale for time-related types
internal const int MAX_TIME_LENGTH = 5 ; // Maximum length for time
internal const int MAX_DATETIME2_LENGTH = 8 ; // Maximum length for datetime2
internal const int WHIDBEY_DATE_LENGTH = 10 ;
internal static readonly int [ ] WHIDBEY_TIME_LENGTH = { 8 , 10 , 11 , 12 , 13 , 14 , 15 , 16 } ;
internal static readonly int [ ] WHIDBEY_DATETIME2_LENGTH = { 19 , 21 , 22 , 23 , 24 , 25 , 26 , 27 } ;
internal static readonly int [ ] WHIDBEY_DATETIMEOFFSET_LENGTH = { 26 , 28 , 29 , 30 , 31 , 32 , 33 , 34 } ;
internal enum FedAuthInfoId : byte {
Stsurl = 0x01 , // FedAuthInfoData is token endpoint URL from which to acquire fed auth token
Spn = 0x02 , // FedAuthInfoData is the SPN to use for acquiring fed auth token
}
// TCE Related constants
internal const byte MAX_SUPPORTED_TCE_VERSION = 0x01 ; // max version
internal const ushort MAX_TCE_CIPHERINFO_SIZE = 2048 ; // max size of cipherinfo blob
internal const long MAX_TCE_CIPHERTEXT_SIZE = 2147483648 ; // max size of encrypted blob- currently 2GB.
internal const byte CustomCipherAlgorithmId = 0 ; // Id used for custom encryption algorithm.
internal const int AES_256_CBC = 1 ;
internal const int AEAD_AES_256_CBC_HMAC_SHA256 = 2 ;
// TCE Param names for exec handling
internal const string TCE_PARAM_CIPHERTEXT = "cipherText" ;
internal const string TCE_PARAM_CIPHER_ALGORITHM_ID = "cipherAlgorithmId" ;
internal const string TCE_PARAM_COLUMNENCRYPTION_KEY = "columnEncryptionKey" ;
internal const string TCE_PARAM_ENCRYPTION_ALGORITHM = "encryptionAlgorithm" ;
internal const string TCE_PARAM_ENCRYPTIONTYPE = "encryptionType" ;
internal const string TCE_PARAM_ENCRYPTIONKEY = "encryptionKey" ;
internal const string TCE_PARAM_MASTERKEY_PATH = "masterKeyPath" ;
internal const string TCE_PARAM_ENCRYPTED_CEK = "encryptedColumnEncryptionKey" ;
internal const string TCE_PARAM_CLIENT_KEYSTORE_PROVIDERS = "clientKeyStoreProviders" ;
internal const string TCE_PARAM_FORCE_COLUMN_ENCRYPTION = "ForceColumnEncryption(true)" ;
}
internal enum ParsingErrorState {
Undefined = 0 ,
FedAuthInfoLengthTooShortForCountOfInfoIds = 1 ,
FedAuthInfoLengthTooShortForData = 2 ,
FedAuthInfoFailedToReadCountOfInfoIds = 3 ,
FedAuthInfoFailedToReadTokenStream = 4 ,
FedAuthInfoInvalidOffset = 5 ,
FedAuthInfoFailedToReadData = 6 ,
FedAuthInfoDataNotUnicode = 7 ,
FedAuthInfoDoesNotContainStsurlAndSpn = 8 ,
FedAuthInfoNotReceived = 9 ,
FedAuthNotAcknowledged = 10 ,
FedAuthFeatureAckContainsExtraData = 11 ,
FedAuthFeatureAckUnknownLibraryType = 12 ,
UnrequestedFeatureAckReceived = 13 ,
UnknownFeatureAck = 14 ,
InvalidTdsTokenReceived = 15 ,
SessionStateLengthTooShort = 16 ,
SessionStateInvalidStatus = 17 ,
CorruptedTdsStream = 18 ,
ProcessSniPacketFailed = 19 ,
FedAuthRequiredPreLoginResponseInvalidValue = 20 ,
TceUnknownVersion = 21 ,
TceInvalidVersion = 22 ,
TceInvalidOrdinalIntoCipherInfoTable = 23 ,
}
internal enum SniContext {
Undefined = 0 ,
Snix_Connect ,
Snix_PreLoginBeforeSuccessfullWrite ,
Snix_PreLogin ,
Snix_LoginSspi ,
Snix_ProcessSspi ,
Snix_Login ,
Snix_EnableMars ,
Snix_AutoEnlist ,
Snix_GetMarsSession ,
Snix_Execute ,
Snix_Read ,
Snix_Close ,
Snix_SendRows ,
}
/// <summary>
/// Column Encryption Setting to be used for the SqlConnection.
/// </summary>
public enum SqlConnectionColumnEncryptionSetting {
/// <summary>
/// Disables column encryption by default on all commands on this connection.
/// </summary>
Disabled = 0 ,
/// <summary>
/// Enables column encryption by default on all commands on this connection.
/// </summary>
Enabled ,
}
/// <summary>
/// Column Encryption Setting to be used for the SqlCommand.
/// </summary>
public enum SqlCommandColumnEncryptionSetting {
/// <summary>
/// if <20> Column Encryption Setting=Enabled<65> in the connection string, use Enabled. Otherwise, maps to Disabled.
/// </summary>
UseConnectionSetting = 0 ,
/// <summary>
/// Enables TCE for the command. Overrides the connection level setting for this command.
/// </summary>
Enabled ,
/// <summary>
/// Parameters will not be encrypted, only the ResultSet will be decrypted. This is an optimization for queries that do not pass any encrypted input parameters.
/// Overrides the connection level setting for this command.
/// </summary>
ResultSetOnly ,
/// <summary>
/// Disables TCE for the command.Overrides the connection level setting for this command.
/// </summary>
Disabled ,
}
public enum SqlAuthenticationMethod {
NotSpecified = 0 ,
SqlPassword ,
ActiveDirectoryPassword ,
ActiveDirectoryIntegrated ,
}
// This enum indicates the state of TransparentNetworkIPResolution
// The first attempt when TNIR is on should be sequential. If the first attempt failes next attempts should be parallel.
internal enum TransparentNetworkResolutionState {
DisabledMode = 0 ,
SequentialMode ,
ParallelMode
} ;
internal class ActiveDirectoryAuthentication
{
internal const string AdoClientId = "4d079b4c-cab7-4b7c-a115-8fd51b6f8239" ;
internal const string AdalGetAccessTokenFunctionName = "ADALGetAccessToken" ;
internal const int GetAccessTokenSuccess = 0 ;
internal const int GetAccessTokenInvalidGrant = 1 ;
internal const int GetAccessTokenTansisentError = 2 ;
internal const int GetAccessTokenOtherError = 3 ;
}
// Fields in the first resultset of "sp_describe_parameter_encryption".
// We expect the server to return the fields in the resultset in the same order as mentioned below.
// If the server changes the below order, then transparent parameter encryption will break.
internal enum DescribeParameterEncryptionResultSet1 {
KeyOrdinal = 0 ,
DbId ,
KeyId ,
KeyVersion ,
KeyMdVersion ,
EncryptedKey ,
ProviderName ,
KeyPath ,
KeyEncryptionAlgorithm ,
}
// Fields in the second resultset of "sp_describe_parameter_encryption"
// We expect the server to return the fields in the resultset in the same order as mentioned below.
// If the server changes the below order, then transparent parameter encryption will break.
internal enum DescribeParameterEncryptionResultSet2 {
ParameterOrdinal = 0 ,
ParameterName ,
ColumnEncryptionAlgorithm ,
ColumnEncrytionType ,
ColumnEncryptionKeyOrdinal ,
NormalizationRuleVersion ,
}
}