Bug #26993 | String agrregrate case returns unexpected data | ||
---|---|---|---|
Submitted: | 9 Mar 2007 10:51 | Modified: | 3 Feb 2009 1:58 |
Reporter: | Jared S (Silver Quality Contributor) | Email Updates: | |
Status: | Closed | Impact on me: | |
Category: | Connector / NET | Severity: | S3 (Non-critical) |
Version: | 5.0.5.0 | OS: | Windows (WinXP) |
Assigned to: | CPU Architecture: | Any | |
Tags: | case, Data Type, qc, return |
[9 Mar 2007 10:51]
Jared S
[15 Mar 2007 10:11]
Tonci Grgin
Hi Jared and thanks for your report. I have several issues with it. Lets start with easy one: - Trace.WriteLine(DTR0.Item("Ex1")) does not compile nor does DataReader have property by the name "Item" Now I don't understand what this report is about: C:\mysql507\bin>mysql -T -uroot test Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 3 Server version: 5.0.38-log Source distribution Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> SELECT CASE 1 WHEN 0 THEN '1' ELSE 0 END as Ex1; Field 1: `Ex1` Catalog: `def` Database: `` Table: `` Org_table: `` Type: VAR_STRING Collation: binary (63) Length: 1 Max_length: 1 Decimals: 31 Flags: NOT_NULL BINARY +-----+ | Ex1 | +-----+ | 0 | +-----+ 1 row in set (0.00 sec) mysql> As you can see, server is returning VARBINARY type for your statement and c/NET respects that: MySqlDbType VarBinary MySql.Data.MySqlClient.MySqlDbType + SystemType {Name = "Byte[]" FullName = "System.Byte[]"} System.Type {System.RuntimeType} So, where's the problem? In server returned metadata? Quick test case: MySqlConnection conn = new MySqlConnection(); conn.ConnectionString = "DataSource=localhost;Database=test;UserID=root;Password=;PORT=3306"; conn.Open(); MySqlCommand command = new MySqlCommand(); command.CommandText = "SELECT CASE 1 WHEN 0 THEN '1' ELSE 0 END as Ex1"; command.CommandType = CommandType.Text; command.Connection = (MySqlConnection)conn; command.CommandTimeout = 0; MySqlDataReader dr = command.ExecuteReader(); dr.Read(); dr.Close(); MessageBox.Show("Ready"); command.Dispose(); conn.Close();
[15 Mar 2007 15:30]
Tonci Grgin
Probably caused by Bug#10491.
[15 Mar 2007 21:37]
Jared S
MySqlConnection conn = new MySqlConnection(); conn.ConnectionString = "DataSource=localhost;Database=test;UserID=root;Password=;PORT=3306"; conn.Open(); MySqlCommand Command = new MySqlCommand(); Command.CommandText = "SELECT CASE 1 WHEN 0 THEN '1' ELSE 0 END as Ex1"; Command.CommandType = CommandType.Text; Command.Connection = conn; Command.CommandTimeout = 0; MySqlDataReader dr = Command.ExecuteReader(); dr.Read(); MessageBox.Show("Ex1:" + dr[0].ToString()); dr.Close(); Command.Dispose(); conn.Close(); \\ Code above is valid C# example generated from Instant C# converter
[19 Mar 2007 14:43]
Tonci Grgin
Jared, this is not a connector bug. This is, by my opinion, a duplicate of Bug#10491 which is a server bug. We'll see if connectors lead will decide to work around this problem or not.
[3 Feb 2009 1:40]
Jared S
Still getting 'System.Byte[]' instead of utf8 text. Duplicate bug was pushed to 5.1.21 and I tested against 5.2.30.
[3 Feb 2009 1:58]
Jared S
[CS] dr.GetString(0) | Succeeds [VB] dr.GetString(0) | Succeeds [VB] dr.Item(0).ToString | Fails Looks likes some sort of IEnumerate flaw NET. Although C# doesn't expose 'Item' property so it is hard to log a bug.