2017-09-02 38 views
0

我試圖連接到本地數據庫 - 我可以使用localhost/phpmyadmin訪問 - 使用ASP.NET Core。我對這門語言很陌生,而且我正在努力解決與MySQL相關的異常問題。ASP.NET核心 - 執行命令時沒有找到密鑰

string constr = Configuration.GetSection("ConnectionStrings:con").Value; 
using (MySqlConnection con = new MySqlConnection(constr)) 
{ 
    string query = @"SELECT id 
        FROM `test`"; 
    using (MySqlCommand cmd = new MySqlCommand(query, con)) 
    { 
     con.Open(); 
     using (var sqlDataReader = cmd.ExecuteReader()) 
     { 
      while (sqlDataReader.Read()) 
      { 
       var id = sqlDataReader.GetInt32(0); 
      } 
     } 
     con.Close(); 
    } 
} 

該異常發生在線路使用(VAR = SqlDataReader的cmd.ExecuteReader())

這是我的連接字符串:

"ConnectionStrings": { 
    "con": "Server=localhost;Database=musense;User=root;Password=********;Charset=utf8" 
} 

我從appsettings.json內設置連接字符串。沒有字符集,我會得到一個例外,「'windows-1252'不是受支持的編碼名稱。」

在運行上面的代碼,我在該行得到下面的異常使用(VAR SqlDataReader的= cmd.ExecuteReader())

/home/memonick/Documents/Projects/musense/musense.csproj : warning NU1701: Package 'MySql.Data 6.9.9' was restored using '.NETFramework,Version=v4.6.1' instead of the project target framework '.NETCoreApp,Version=v2.0'. This package may not be fully compatible with your project. 
/home/memonick/Documents/Projects/musense/musense.csproj : warning NU1701: Package 'MySql.Data 6.9.9' was restored using '.NETFramework,Version=v4.6.1' instead of the project target framework '.NETCoreApp,Version=v2.0'. This package may not be fully compatible with your project. 

Unhandled Exception: System.Collections.Generic.KeyNotFoundException: The given key was not present in the dictionary. 
    at System.ThrowHelper.ThrowKeyNotFoundException() 
    at System.Collections.Generic.Dictionary`2.get_Item(TKey key) 
    at MySql.Data.MySqlClient.MySqlField.SetFieldEncoding() 
    at MySql.Data.MySqlClient.NativeDriver.GetColumnData(MySqlField field) 
    at MySql.Data.MySqlClient.NativeDriver.GetColumnsData(MySqlField[] columns) 
    at MySql.Data.MySqlClient.Driver.GetColumns(Int32 count) 
    at MySql.Data.MySqlClient.ResultSet.LoadColumns(Int32 numCols) 
    at MySql.Data.MySqlClient.ResultSet..ctor(Driver d, Int32 statementId, Int32 numCols) 
    at MySql.Data.MySqlClient.Driver.NextResult(Int32 statementId, Boolean force) 
    at MySql.Data.MySqlClient.MySqlDataReader.NextResult() 
    at MySql.Data.MySqlClient.MySqlDataReader.Close() 
    at MySql.Data.MySqlClient.MySqlCommand.ResetReader() 
    at MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior) 
    at musense.Startup.ConfigureServices(IServiceCollection services) in /home/memonick/Documents/Projects/musense/Startup.cs:line 46 
--- End of stack trace from previous location where exception was thrown --- 
    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 
    at Microsoft.AspNetCore.Hosting.ConventionBasedStartup.ConfigureServices(IServiceCollection services) 
    at Microsoft.AspNetCore.Hosting.Internal.WebHost.EnsureApplicationServices() 
    at Microsoft.AspNetCore.Hosting.Internal.WebHost.BuildApplication() 
    at Microsoft.AspNetCore.Hosting.WebHostBuilder.Build() 
    at musense.Program.BuildWebHost(String[] args) in /home/memonick/Documents/Projects/musense/Program.cs:line 21 
    at musense.Program.Main(String[] args) in /home/memonick/Documents/Projects/musense/Program.cs:line 17 

值得一提的是,正在建立連接。因此,例如,我可以更新一行或執行SELECT VERSION()。只有當我嘗試在ASP.NET Core的表上執行SELECT語句時,纔會出現問題。聲明本身似乎是有效的,因爲它通常在phpmyadmin中執行。

測試表有以下模式:

CREATE TABLE IF NOT EXISTS `test` (
    `id` int(11) NOT NULL, 
    `value` int(11) NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_swedish_ci; 

我已經試過各種排序規則,但仍存在例外。歡迎任何幫助!

+0

MySQL連接器返回一個可以與DBNull.Value進行比較的值。它看起來像數據庫從記錄返回空值。 – Adrian

+0

@AnirudhaGupta哪個連接器應該返回一個值? – MemoNick

+0

我認爲這是你的主鍵,它是否存在。因爲如果它是空的,它將會產生類型轉換異常,並且你的異常提示沒有任何東西返回0索引。 – Adrian

回答

1

您的問題上升的事實,您使用的是NuGet包不兼容.NETCoreApp2.0

/home/memonick/Documents/Projects/musense/musense.csproj : warning NU1701: Package 'MySql.Data 6.9.9' was restored using '.NETFramework,Version=v4.6.1' instead of the project target framework '.NETCoreApp,Version=v2.0'. This package may not be fully compatible with your project. 

您需要升級MySql.Data 6.9.9和使用至少6.10.3-rc版本(記得檢查節目搶鮮包在nuget瀏覽器),與.netstandard1.3及以上(含.NETCoreApp2.0)兼容。

相關問題