UInt64 DoneRowCount; // read 4 bytes if TDS > 7.1, otherwise, read 2 bytes public void Read(TDSReader r) { if (r.TDSVersion == (UInt32)TDSVersions.Unknown) { throw new UnknownTDSVersionException("Done token needs to know the TDS version."); } Status = r.ReadUInt16(); CurCmd = r.ReadUInt16(); byte TDSVer = (byte)(r.TDSVersion & 0x000000FF); DoneRowCount = (TDSVer < 0x72) ? r.ReadUInt32() : r.ReadUInt64(); r.TokenDone(); }
public void Read(TDSReader r) { Length = r.ReadUInt16(); r.TokenStart(Length); Number = r.ReadUInt32(); State = r.ReadByte(); Class = r.ReadByte(); Message = r.ReadUnicodeString2(); ServerName = r.ReadUnicodeString1(); ProcedureName = r.ReadUnicodeString1(); LineNumber = r.ReadUInt32(); r.TokenDone(); }
public void Read(TDSReader r) { byte MajorVer; byte MinorVer; ushort Build; Length = r.ReadUInt16(); r.TokenStart(Length); Interface = r.ReadByte(); TDSVersion = r.ReadUInt32(); r.TDSVersion = TDSVersion; ProgramName = r.ReadUnicodeString1(); MajorVer = r.ReadByte(); MinorVer = r.ReadByte(); Build = r.ReadUInt16(); ProgramVersion = MajorVer + "." + MinorVer + "." + Build; r.TokenDone(); }
public void Read(TDSReader r) { uint ReadLength = 4; uint headerLength; ushort headerType; TotalLength = r.ReadUInt32(); r.TokenStart((int)TotalLength - 4); // TotalLength includes its own length (DWORD = 4 bytes) while (ReadLength < TotalLength) { headerLength = r.ReadUInt32(); ReadLength += headerLength; headerType = r.ReadUInt16(); switch (headerType) { case 1: { notification = new TDSHeaderQueryNotification(); notification.Read(r, (int)headerLength); break; } case 2: { txd = new TDSHeaderTransactionDescriptor(); txd.Read(r); break; } case 3: { trace = new TDSHeaderTraceActivity(); trace.Read(r); break; } } } r.TokenDone(); if (TotalLength != ReadLength) { throw new InvalidTDSException("TDS HeaderAll TotalLength(" + TotalLength + ") does not equal ReadLength(" + ReadLength + ")."); } }
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 } }