2012-12-05 70 views
3

我在寫一段C#代碼以從mysql數據庫獲取一些數據。我已經開始用現成的例子,但它給了我一個錯誤在rdr = cmd.ExecuteReader()C#mysql示例Command.ExecuteReader拋出異常

拋出的異常的屏幕截圖如下所示以及

exception thrown screenshot

using System; 
using MySql.Data.MySqlClient; 

public class Program 
{ 

    static void Main() 
    { 
      string serverName = "192.168.0.012"; 
      string port = "1234"; 
      string db = "cust_db"; 
      string userID = "root"; 
      string password = "pass"; 
      string cs = "Server=" + serverName + ";Port=" + port + ";Database=" + db + ";Uid=" + userID + ";password=" + password; 


     MySqlConnection conn = null; 
     MySqlDataReader rdr = null; 

     try 
     { 
      conn = new MySqlConnection(cs); 
      conn.Open(); 

      string stm = "SELECT * FROM cust_tb"; 
      MySqlCommand cmd = new MySqlCommand(stm, conn); 
      rdr = cmd.ExecuteReader(); 

      while (rdr.Read()) 
      { 
       Console.WriteLine(rdr.GetInt32(0) + ": " 
        + rdr.GetString(1)); 
      } 

     } catch (MySqlException ex) 
     { 
      Console.WriteLine("Error: {0}", ex.ToString()); 

     } finally 
     { 
      if (rdr != null) 
      { 
       rdr.Close(); 
      } 

      if (conn != null) 
      { 
       conn.Close(); 
      } 

     } 
    } 
} 


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 MySql.Data.MySqlClient.MySqlCommand.ExecuteReader() 
    at Program.Main() in c:\Users\omran.alhammadi\Desktop\csMysqlConnection\csMysqlConnection\Program.cs:line 28 
    at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args) 
    at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args) 
    at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() 
    at System.Threading.ThreadHelper.ThreadStart_Context(Object state) 
    at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) 
    at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) 
    at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) 
    at System.Threading.ThreadHelper.ThreadStart()</StackTrace><ExceptionString>System.Collections.Generic.KeyNotFoundException: The given key was not present in the dictionary. 
    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 MySql.Data.MySqlClient.MySqlCommand.ExecuteReader() 
    at Program.Main() in c:\Users\omran.alhammadi\Desktop\csMysqlConnection\csMysqlConnection\Program.cs:line 28 
    at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args) 
    at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args) 
    at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() 
    at System.Threading.ThreadHelper.ThreadStart_Context(Object state) 
    at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) 
    at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) 
    at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) 
    at System.Threading.ThreadHelper.ThreadStart()</ExceptionString></Exception></TraceRecord> 
An unhandled exception of type 'System.Collections.Generic.KeyNotFoundException' occurred in mscorlib.dll 
Additional information: The given key was not present in the dictionary. 
The program '[17084] csMysqlConnection.vshost.exe: Managed (v4.0.30319)' has exited with code -1 (0xffffffff). 
+0

什麼行是拋出的異常? –

+0

at rdr = cmd.ExecuteReader() – Omran

+0

你能展示更多的異常細節,比如堆棧跟蹤嗎? –

回答

4

我一直有這個問題,我做了一些研究。過了一會兒,我解決了這個問題。

我的問題是數據庫表編碼。我有utf32_unicode_ci,我將它改爲utf8_unicode_ci。它現在完美。

希望你有一些運氣。

+0

你是怎麼做到的? –