簡體   English   中英

ASP.NET Core-執行命令后找不到密鑰

[英]ASP.NET Core - Key Not Found Upon Execute Command

我正在嘗試連接到我的本地數據庫-使用ASP.NET Core可以使用localhost / phpmyadmin訪問該數據庫。 我是該語言的新手,並且正在努力解決與MySQL相關的異常。

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;

我嘗試了各種排序規則,但異常仍然存在。 歡迎任何幫助!

您使用的是與.NETCoreApp2.0不兼容的NuGet軟件包,這引起了您的問題:

/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瀏覽器中檢查show prerelease 軟件包 ),該版本與.netstandard1.3及更高版本(包括.NETCoreApp2.0 )兼容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM