我陷入了一個問題,並沒有一個單一的想法WTF正在發生。我有一個C#Web應用程序需要使用Web服務與MySQL數據庫通信。我可以使用的方法來插入數據,但每當我嘗試閱讀任何東西(的ExecuteReader或的ExecuteScalar)失敗這個很奇怪的消息:ASP .Net - MySql - 無法讀取任何數據
給定的關鍵是不存在的字典。
現在,Web服務使用這個類與數據庫進行通信:
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;
}
}
它未能對cmd.ExecuteReader或cmd.ExecuteScalar!
在另一方面,從Web服務的方法看起來如下:
[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();
}
這是很奇怪的,因爲錯誤是非常神祕的(我不使用一本字典的話),我已經使用在許多其他應用程序中也是這個類。我在另一臺計算機上嘗試了相同的解決方案,結果相同。我甚至已經嘗試不同版本的MySql.Data.dll
錯誤堆棧:
System.Collections.Generic.KeyNotFoundException是由用戶代碼的HResult = -2146232969消息未處理=給定的關鍵是而不是 目前在字典中。 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() 在MySql.Data.MySqlClient.NativeDriver.GetFieldMetaData() 在MySql.Data.MySqlClient.NativeDriver.ReadColumnMetadata(的Int32計數) 在MySql.Data.MySqlClient.MySqlDataReader.NextResult() 在MySql.Data。在C:\ Users \ Visar \ Documents \ Visual Studio中的Panopticon.DataLayer.DatabaseHelper.RunExecuteDataReader(String sql, MySqlParameter []參數)中MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior 行爲) 2010 \ Projects \ TestApp \ TestApp \ DataLayer \ DatabaseHelper.cs:line 84 at C:\ Users \ Visar \ Documents \ Visual Studio中的Panopticon._Default.Page_Load(Object sender,EventArgs e) 2010 \ Projects \ TestApp \ TestApp \ Default.aspx.cs:line 16 at System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) at System.Web.Cn.System.Web.UI.Control.OnLoad(EventArgs e) 。 System.Web.UI.Page上的UI.Control.LoadRecursive() 。ProcessRequestMain(布爾includeStagesBeforeAsyncPoint,布爾includeStagesAfterAsyncPoint)
的InnerException:
將重構你的幫手,以及從config文件讀取,並從硬編碼值遠.. – MethodMan
你能發佈錯誤堆棧PLZ – Marc
我當然從web.config中讀取認爲有問題:( – user10901