Stereofenix
New Member
I am stuck with a problem and do not have a single idea WTF is happening. I've got an C# web application that needs to communicate with a MySQL db using web services. I can use methods to insert data, but whenever I try to read anything (ExecuteReader or ExecuteScalar) it fails with this very strange message:\[quote\] The given key was not present in the dictionary.\[/quote\]Now, the web service uses this class to communicate with the db:\[code\] public class DatabaseHelper{ private MySqlCommand cmd; private MySqlConnection con; public DatabaseHelper() { String server = "localhost"; String database = "testdb"; String password = "password"; String username = "root"; String connString = "Server = " + server + "; Database = " + database + "; Uid = " + username + "; Pwd = " + password + "; default command timeout=60;"; con = new MySqlConnection(); con.ConnectionString = connString; cmd = new MySqlCommand(); cmd.Connection = con; } public void RunExecuteNonQuery(string sql, MySqlParameter[] param) { try { cmd.CommandText = sql; if (param != null) { cmd.Parameters.AddRange(param); } cmd.CommandText = sql; con.Open(); cmd.ExecuteNonQuery(); con.Close(); cmd.Parameters.Clear(); } catch (MySqlException ex) { con.Close(); } } public object RunExecuteScalar(string sql, MySqlParameter[] param) { if (param != null) { cmd.Parameters.AddRange(param); } cmd.CommandText = sql; object ret; con.Open(); ret = cmd.ExecuteScalar(); con.Close(); cmd.Parameters.Clear(); return ret; } public MySqlDataReader RunExecuteDataReader(string sql, MySqlParameter[] param) { if (param != null) { cmd.Parameters.AddRange(param); } cmd.CommandText = sql; MySqlDataReader ret = null; con.Open(); ret = cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection); cmd.Parameters.Clear(); return ret; }}\[/code\]It fails on cmd.ExecuteReader or cmd.ExecuteScalar!On the other hand, a method from the web service looks as following:\[code\] [WebMethod] public string[] GetCategories() { String sql = "SELECT * FROM category"; DatabaseHelper dh = new DatabaseHelper(); MySqlDataReader dr = dh.RunExecuteDataReader(sql, null); List<String> categories = new List<string>(); while (dr.Read()) { categories.Add(dr[0].ToString()); } dr.Close(); return categories.ToArray(); }\[/code\]It is really strange since the error is very cryptic (I am not using a dictionary at all) and I have used this same class in many other applications. I tried this same solution on a different computer with the same result. I have even tried different versions of MySql.Data.dllThe error stack:\[quote\] \[quote\] System.Collections.Generic.KeyNotFoundException was unhandled by user code HResult=-2146232969 Message=The given key was not present in the dictionary. Source=mscorlib StackTrace: at System.Collections.Generic.Dictionary`2.get_Item(TKey key) at MySql.Data.MySqlClient.CharSetMap.GetChararcterSet(DBVersion version, String CharSetName) at MySql.Data.MySqlClient.NativeDriver.GetFieldMetaData41() at MySql.Data.MySqlClient.NativeDriver.GetFieldMetaData() at MySql.Data.MySqlClient.NativeDriver.ReadColumnMetadata(Int32 count) at MySql.Data.MySqlClient.MySqlDataReader.NextResult() at MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior) at Panopticon.DataLayer.DatabaseHelper.RunExecuteDataReader(String sql, MySqlParameter[] param) in C:\Users\Visar\Documents\Visual Studio 2010\Projects\TestApp\TestApp\DataLayer\DatabaseHelper.cs:line 84 at Panopticon._Default.Page_Load(Object sender, EventArgs e) in C:\Users\Visar\Documents\Visual Studio 2010\Projects\TestApp\TestApp\Default.aspx.cs:line 16 at System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) at System.Web.UI.Control.OnLoad(EventArgs e) at System.Web.UI.Control.LoadRecursive() at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
InnerException: \[/quote\]\[/quote\]
InnerException: \[/quote\]\[/quote\]