Пример #1
0
        public string AlternateServer = null;   // server name to reroute the connection to

        public void Read(TDSReader r)
        {
            Length = r.ReadUInt16();
            r.TokenStart(Length);
            EnvChangeType = (TDSEnvChgTokens)r.ReadByte();
            if (EnvChangeType == TDSEnvChgTokens.PromoteTrans)
            {
                r.TokenDone();                                                // Length always 1 for this token type
            }
            switch (EnvChangeType)
            {
            case TDSEnvChgTokens.Database:                   //   1  Database name
            case TDSEnvChgTokens.Language:                   //   2  Language
            case TDSEnvChgTokens.CharSet:                    //   3  Character set                         - TDS 7.0
            case TDSEnvChgTokens.PacketSize:                 //   4  Packet Size
            case TDSEnvChgTokens.UnicodeSortLocale:          //   5  Unicode data sorting locale id        - TDS 7.0
            case TDSEnvChgTokens.UnicodeCompareFlags:        //   6  Unicode data sorting comparison flags - TDS 7.0
            case TDSEnvChgTokens.MirrorPartner:              //  13  Database mirroring partner
            case TDSEnvChgTokens.UserInfo:                   //  19  User instance
            {
                NewValue = r.ReadUnicodeString1();           // returns "" if length argument is zero
                OldValue = r.ReadUnicodeString1();
                break;
            }

            case TDSEnvChgTokens.Collation:                  //   7  SQL collation - generally 5 bytes
            case TDSEnvChgTokens.BeginTrans:                 //   8  Begin transaction          - old data is always 0x00 length
            case TDSEnvChgTokens.CommitTrans:                //   9  Commit transaction         - new data is always 0x00 length
            case TDSEnvChgTokens.RollbackTrans:              //  10  Rollback transaction       - new data is always 0x00 length
            case TDSEnvChgTokens.EnlistDTC:                  //  11  Enlist TDS transaction     - new data is always 0x00 length
            case TDSEnvChgTokens.DefectTrans:                //  12  Defect transaction         - old data is always 0x00 length
            case TDSEnvChgTokens.TransMgrAddress:            //  16  Transaction Manager Address- old data is always 0x00 length - unused token
            case TDSEnvChgTokens.TransEnded:                 //  17  Transaction Ended          - new data is always 0x00 length
            case TDSEnvChgTokens.ResetCompletedAck:          //  18  Reset achknowledgement     - new data and old data both 0x00 length
            {
                NewBytes = r.ReadBytes1();
                OldBytes = r.ReadBytes1();
                break;
            }

            case TDSEnvChgTokens.PromoteTrans:               //  15  Promote transaction        - new data length is 4 bytes, old data is always 0x00 length
            {
                NewBytes = r.ReadBytes4();
                r.ReadByte();             // no real old data, just a 1 byte 0-length indicator
                break;
            }

            case TDSEnvChgTokens.Routing:                    //  20  Routing                    - old data length is always 0x0000
            {
                // new value
                ushort RoutingDataLength = r.ReadUInt16();           // may be sent if ReadOnlyIntent is true in TDS 7.1 - 7.3; could be sent in 7.4 even if the flag is false
                if (RoutingDataLength > 0)
                {
                    Protocol         = r.ReadByte();
                    ProtocolProperty = r.ReadUInt16();
                    AlternateServer  = r.ReadUnicodeString2();
                }
                // old value
                r.ReadUInt16();
                break;
            }
            }
            if (EnvChangeType != TDSEnvChgTokens.PromoteTrans)
            {
                r.TokenDone();                                                 // Length for this token is always 1 even if there is more data; r.DoneToken(0 is called earlier for this token type
            }
        }