I get a hung datareader when I try to close it. This is on WinServer 2003, with MySQL
v4.1.5 gamma, with MyConnector/.NET bits from Oct 5th. It used to work with 1.0 beta 1
but I had to get more recent bits to overcome the NULL column problem. Note that I
haven't tried more recent bits, having problems compiling them (see previous posting,
sorry...).
Sequence of events:
- Prepare everything for the connection
- Send out several commands that work
- then (sqlCmd is a MySqlCommand object):
sqlCmd->CommandText = "use mydatabase; show tables;";
MySqlDataReader* rdr = sqlCmd->ExecuteReader();
while (rdr->Read()) {
String* tblname = rdr->GetString(0);
// do something with tblname
}
rdr->Close(); //hangs
Hangs on line (in PacketReader.cs/OpenReader(); this line just never returns; no
exception, no nothing):
packetLength = stream.ReadByte() + (stream.ReadByte() << 8) + (stream.ReadByte()
<< 16);
Dump of the call stack at hang time (when pausing the debugger)
* 00000000()
* system.dll!System.Net.Sockets.Socket.Receive(byte[] buffer = {Length=4096}, int offset
= 0, int size = 4096, System.Net.Sockets.SocketFlags socketFlags = None) + 0x14e bytes
* system.dll!System.Net.Sockets.NetworkStream.Read(byte[] buffer = {Length=4096}, int
offset = 0, int size = 4096) + 0x150 bytes
* mscorlib.dll!System.IO.BufferedStream.ReadByte() + 0x87 bytes
* mysql.data.dll!MySql.Data.MySqlClient.PacketReader.OpenPacket() Line 83 + 0xe bytes
* mysql.data.dll!MySql.Data.MySqlClient.NativeDriver.ReadResult(ulong affectedRows = 0,
long lastInsertId = 0, MySql.Data.MySqlClient.ServerStatusFlags serverStatus = 10, int
warningCount = 0, string serverMessage = null) Line 385
* mysql.data.dll!MySql.Data.MySqlClient.CommandResult.ReadNextResult(bool isFirst =
false) Line 117 + 0x2c bytes
* mysql.data.dll!MySql.Data.MySqlClient.MySqlCommand.GetNextResultSet(MySql.Data.MySqlClient.MySqlDataReader
reader = <undefined value>) Line 300 + 0x13 bytes
* mysql.data.dll!MySql.Data.MySqlClient.MySqlCommand.Consume() Line 273 + 0xa bytes
* mysql.data.dll!MySql.Data.MySqlClient.MySqlDataReader.Close() Line 128
After a bit more investigation, I was able to circumvent the problem by splitting the
command line into two separate commands: "use mydatabase" with a
sqlCmd->ExecuteNonQuery(), followed by a "show tables;" with ExecuteReader().
It used to work on ByteFX 0.76 and on Connector/.NET 1.0 beta , so I'm curious: is it
illegal to concatenate several command and send a single Execute, or are there other
precautions to be taken ?
Thanks,
Pyt.