public void Open(MySqlConnectionString settings) { // connect to one of our specified hosts try { StreamCreator sc = new StreamCreator(settings.Server, settings.Port, settings.PipeName); stream = sc.GetStream(settings.ConnectionTimeout); } catch (Exception ex) { throw new MySqlException("Unable to connect to any of the specified MySQL hosts", ex); } if (stream == null) { throw new MySqlException("Unable to connect to any of the specified MySQL hosts"); } writer = new BufferedStream(stream); // read off the welcome packet and parse out it's values Packet packet = ReadPacket(); protocol = packet.ReadByte(); versionString = packet.ReadString(); serverVersion = DBVersion.Parse(versionString); threadID = (uint)packet.ReadInteger(4); encryptionSeed = packet.ReadString(); // read in Server capabilities if they are provided serverCaps = 0; if (packet.HasMoreData) { serverCaps = (int)packet.ReadInteger(2); } Authenticate(settings.UserId, settings.Password, settings.UseCompression); // if we are using compression, then we use our CompressedStream class // to hide the ugliness of managing the compression if (settings.UseCompression) { stream = new CompressedStream(stream); writer = new BufferedStream(stream); } isOpen = true; }
public MySqlField GetField() { MySqlField f = new MySqlField( driver.Encoding ); packet = driver.ReadPacket(); f.TableName = packet.ReadLenString(); f.ColumnName = packet.ReadLenString(); f.ColumnLength = (int)packet.ReadNBytes(); f.Type = (MySqlDbType)packet.ReadNBytes(); packet.ReadByte(); // this is apparently 2 -- not sure what it is for f.Flags = (ColumnFlags)packet.ReadInteger(2); //(short)(d.ReadByte() & 0xff); f.NumericScale = packet.ReadByte(); fieldsRead++; return f; }
public MySqlField GetField() { MySqlField f = new MySqlField(driver.Encoding); packet = driver.ReadPacket(); f.TableName = packet.ReadLenString(); f.ColumnName = packet.ReadLenString(); f.ColumnLength = (int)packet.ReadNBytes(); f.Type = (MySqlDbType)packet.ReadNBytes(); packet.ReadByte(); // this is apparently 2 -- not sure what it is for f.Flags = (ColumnFlags)packet.ReadInteger(2); //(short)(d.ReadByte() & 0xff); f.NumericScale = packet.ReadByte(); fieldsRead++; return(f); }
/// <summary> /// Reads a single packet off the stream /// </summary> /// <returns></returns> public Packet ReadPacket() { // if we have peeked at a packet, then return it if (peekedPacket != null) { Packet packet = peekedPacket; peekedPacket = null; return(packet); } Packet p = ReadPacketFromServer(); // if this is an error packet, then throw the exception if (p[0] == 0xff) { p.ReadByte(); int errorCode = (int)p.ReadInteger(2); string msg = p.ReadString(); throw new MySqlException(msg, errorCode); } return(p); }