Неправильная ошибка приведения при запросе базы данных - PullRequest
0 голосов
/ 10 февраля 2020

Я разрабатываю консольное приложение в. 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();
            }

Ответы [ 2 ]

3 голосов
/ 10 февраля 2020

In. NET Core 3.0, двоичные файлы SQL, относящиеся к серверу, и его типы данных были перемещены из собственного пространства имен System.Data в их собственный выделенный пакет, чтобы сделать среду менее раздутой.

Те разработчики, которым все еще нужно использовать SQL Server, могут зарегистрироваться, загрузив необходимый пакет NuGet по адресу Microsoft.Data.SqlClient .

Ссылка: https://devblogs.microsoft.com/dotnet/introducing-the-new-microsoftdatasqlclient/

0 голосов
/ 10 февраля 2020

Microsoft.EntityFrameworkCore.SqlServer библиотека использует Microsoft.Data.SqlClient. Поэтому вам нужно использовать это вместо System.Data.SqlClient.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...