Я разрабатываю консольное приложение в. NET Ядро для чтения / записи в базе данных, используя тот же код (с небольшими изменениями), что и мое предыдущее приложение (для Интернета, написанное в ASP. NET MVC).
Однако, когда я запрашиваю базу данных, программа (которая работает) выдает недопустимое исключение приведения
System.InvalidCastException: 'Невозможно привести объект к введите «Microsoft.Data.SqlClient.SqlCommand», чтобы ввести «System.Data.SqlClient.SqlCommand». '.
Но в моем веб-приложении эти команды выполняются без проблем.
Может ли кто-нибудь помочь мне решить эту проблему?
A .csproj
file:
…
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp2.1</TargetFramework>
<StartupObject></StartupObject>
</PropertyGroup>
…
<ItemGroup>
…
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="3.1.1" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="3.1.1" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="3.1.1" />
<PackageReference Include="Microsoft.Windows.Compatibility" Version="2.0.0" />
…
</ItemGroup>
Моя Main
подпрограмма в Program.cs
, где я настраиваю приложение:
using System;
using System.IO;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.SqlServer;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Newtonsoft.Json;
using System.Collections.Generic;
…
var optionsBuilder = new DbContextOptionsBuilder<fmDataContext>();
optionsBuilder
.UseSqlServer(connectionString, providerOptions => providerOptions.CommandTimeout(60));
using (fmDataContext context = new fmDataContext(optionsBuilder.Options))
…
Мой запрос к базе данных, где происходит ошибка (в моем классе контекста данных):
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.SqlServer;
using System.Data;
using System.Data.Common;
using System.Data.SqlClient;
…
DataTable dt = new DataTable();
DbConnection connection = Database.GetDbConnection();//)
using (DbCommand cmd = connection.CreateCommand())
using (DbDataAdapter sda = new SqlDataAdapter((SqlCommand)cmd))
{
cmd.CommandText = sqlQuery;
cmd.CommandType = CommandType.Text;
connection.Open();
rows_returned = sda.Fill(dt);
connection.Close();
}