查询数据库时出现无效转换错误

JDi*_*ias 1 c# sql-server entity-framework .net-core

我正在 .NET Core 中开发一个控制台应用程序,用于在数据库中读/写,使用与我之前的应用程序(针对 Web,用 ASP.NET MVC 编写)相同的代码(稍作更改)。

\n\n

但是,当我查询数据库时,程序(正在运行)抛出无效的强制转换异常

\n\n
\n

System.InvalidCastException:\'无法将\'Microsoft.Data.SqlClient.SqlCommand\'类型的对象强制转换为\'System.Data.SqlClient.SqlCommand\'。\'。

\n
\n\n

但这些命令在我的网络应用程序中运行没有问题。

\n\n

有人能帮我解决这个问题吗?

\n\n

一份 .csproj文件:

\n\n
\xe2\x80\xa6 \n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>netcoreapp2.1</TargetFramework>\n    <StartupObject></StartupObject>\n  </PropertyGroup>\n\xe2\x80\xa6\n  <ItemGroup>\n\xe2\x80\xa6 \n    <PackageReference Include="Microsoft.EntityFrameworkCore" Version="3.1.1" />\n    <PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="3.1.1" />\n    <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="3.1.1" />\n    <PackageReference Include="Microsoft.Windows.Compatibility" Version="2.0.0" />\n\xe2\x80\xa6 \n  </ItemGroup>\n
Run Code Online (Sandbox Code Playgroud)\n\n

我在中配置应用程序的Main例程:Program.cs

\n\n
using System;\nusing System.IO;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.SqlServer;\nusing Microsoft.Extensions.Configuration;\nusing Microsoft.Extensions.DependencyInjection;\nusing Newtonsoft.Json;\nusing System.Collections.Generic;\n\xe2\x80\xa6 \n            var optionsBuilder = new DbContextOptionsBuilder<fmDataContext>();\n\n            optionsBuilder\n                .UseSqlServer(connectionString, providerOptions => providerOptions.CommandTimeout(60));\n\n            using (fmDataContext context = new fmDataContext(optionsBuilder.Options))\n\xe2\x80\xa6 \n
Run Code Online (Sandbox Code Playgroud)\n\n

我对数据库的查询,发生错误的地方(在我的数据上下文类中):

\n\n
using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.SqlServer;\nusing System.Data;\nusing System.Data.Common;\nusing System.Data.SqlClient;\n\xe2\x80\xa6 \n            DataTable dt = new DataTable();\n\n            DbConnection connection = Database.GetDbConnection();//)\n            using (DbCommand cmd = connection.CreateCommand())\n            using (DbDataAdapter sda = new SqlDataAdapter((SqlCommand)cmd))\n            {\n                cmd.CommandText = sqlQuery;\n                cmd.CommandType = CommandType.Text;\n                connection.Open();\n                rows_returned = sda.Fill(dt);\n                connection.Close();\n            }\n
Run Code Online (Sandbox Code Playgroud)\n

sil*_*ire 5

在 .NET Core 3.0 中,与 SQL Server 相关的二进制文件及其数据类型已从本机命名空间移出System.Data并移至其自己的专用包中,这使得 .NET SDK 不再那么臃肿。

那些仍然需要使用的开发人员可以通过在Microsoft.Data.SqlClientSQL Server下载必要的 NuGet 包来选择加入。

参考: https ://devblogs.microsoft.com/dotnet/introducing-the-new-microsoftdatasqlclient/