Как использовать SqlClient в ASP.NET Core?

83

Я пытаюсь использовать библиотеку SQLClient в ядре ASP.net, но, похоже, не могу заставить ее работать. Я нашел эту статью в Интернете, в которой рассказывается, как настроить, но она не работает для меня: http://blog.developers.ba/using-classic-ado-net-in-asp-net-vnext/

У меня есть простой пакет консольного приложения. Мой project.json выглядит так:

{
  "version": "1.0.0-*",
  "description": "DBTest Console Application",
  "authors": [ "" ],
  "tags": [ "" ],
  "projectUrl": "",
  "licenseUrl": "",

  "compilationOptions": {
    "emitEntryPoint": true
  },

  "dependencies": {
    "System.Data.Common": "4.0.1-beta-23516",
    "System.Data.SqlClient" :  "4.0.0-beta-23516"
  },

  "commands": {
    "DBTest": "DBTest"
  },

  "frameworks": {
    "dnx451": { },
    "dnxcore50": {
      "dependencies": {
        "Microsoft.CSharp": "4.0.1-beta-23516",
        "System.Collections": "4.0.11-beta-23516",
        "System.Console": "4.0.0-beta-23516",
        "System.Linq": "4.0.1-beta-23516",
        "System.Threading": "4.0.11-beta-23516"
      }
    }
  }
}

И я пробую следующий код:

using System;
using System.Data.SqlClient;

namespace DBTest
{
    public class Program
    {
        public static void Main(string[] args)
        {
            using (SqlConnection con = new SqlConnection(ConnStr)) {
                con.Open();
                try {
                    using (SqlCommand command = new SqlCommand("SELECT * FROM SAMPLETABLE", con)) {
                        command.ExecuteNonQuery();
                    }
                }
                catch {
                    Console.WriteLine("Something went wrong");
                }
            }

            Console.Read();
        }
    }
}

Но получаются следующие ошибки:

введите описание изображения здесь

У кого-нибудь еще это работает?

Роб МакКейб
источник
1
Я не вижу ссылки на System.Runtime ни в одной из ваших зависимостей. Вы пробовали добавить один?
thorkia
1
также вы не выполняете UPDATE, INSERT or DELETEкоманду в своем sql, так почему вы используете command.ExecuteNonQuery();поиск с использованием Fill()метода для возврата данных из базы данных или метода ExecuteScalar, если возвращается только одна строка. вам также необходимо добавить ссылки не только using section in the .cs file class headerна referenceузел, но и вручную добавить их в узел в проекте
MethodMan
1
Ваши ошибки указывают на то, что вы не добавили надлежащие ссылки для DNX 4.5.1. Вы строите для двух типов проектов одновременно. Если вас не волнует DNX.4.5.1, удалите его из своей конфигурации, и он должен быть собран.
Мейсон
1
Ребята - всем огромное спасибо! Удален раздел DNX 4.5.1 и добавлена ​​зависимость System.Runtime к настройкам, и он работал отлично (и все это после перезапуска визуальной студии!). Еще раз спасибо!!!
Роб МакКейб,

Ответы:

163

Я думаю, вы могли пропустить эту часть в руководстве:

Вместо того, чтобы ссылаться на System.Data и System.Data.SqlClient, вам нужно получить из Nuget:

System.Data.Common и System.Data.SqlClient.

В настоящее время это создает зависимость в разделе project.json -> aspnetcore50 от этих двух библиотек.

"aspnetcore50": {
       "dependencies": {
           "System.Runtime": "4.0.20-beta-22523",
           "System.Data.Common": "4.0.0.0-beta-22605",
           "System.Data.SqlClient": "4.0.0.0-beta-22605"
       }
}

Попробуйте получить System.Data.Common и System.Data.SqlClient через Nuget и посмотрите, добавляет ли это вышеупомянутые зависимости для вас, но в двух словах вам не хватает System.Runtime.

Изменить: в соответствии с ответом Моцарта, если вы используете .NET Core 3+, используйте ссылку Microsoft.Data.SqlClient.

MikeDub
источник
6
Мне нужно было только добавить System.Data.SqlClientчерез, Nugetи он работает с Dapperin .NET Core 1.1.
Тадей
2
Я только что добавил system.data.sqlclient через Nuget, и он работает
Шахрам
1
Кажется, это исправлено в .NET Core 2.0. По крайней мере, для меня.
Тадей
Я использовал интерфейс вместо редактирования файла конфигурации: щелкнул правой кнопкой мыши Зависимости в обозревателе решений, NuGet ....
Евгений Ноздрев
У меня возникли проблемы с добавлением этого пакета с помощью пакета Nuget или dotnet add. Решение заключалось в том, чтобы напрямую поместить зависимость в файл проекта и выполнить восстановление - восстановление dotnet. Файл Nuget.config должен содержать nuget.org в разделе packageSources.
user2809176
69

Для Dot Net Core 3 следует использовать Microsoft.Data.SqlClient .

Моцарт Аль Хатиб
источник
9
Этот комментарий спасет всех, кто переходит с .NET Core 2.2 на .NET Core 3.0. Замените все ссылки из System.Data.SqlClient на Microsoft.Data.SqlClient.
Admir Tuzović
@mozart, может ли .Net Core 2.2 использовать Microsoft.Data.SqlClient? или Microsoft.Data.SqlClient используется только для .net Core 3?
Daleman
@Daleman Я решил эту проблему при переходе на .Net Core 3, поэтому я не пробовал с 2.2, я не думаю, что это работает «У каждого параметра есть тип данных, верно?», Но вы можете попробовать.
Моцарт Аль Хатиб
@Mozar, а ваше соединение с базой данных все еще использует построитель строк?
Daleman
@Daleman Если вы имели в виду SqlConnectionStringBuilder, да, это доступно в этом NuGget.
Моцарт Аль Хатиб
3

Попробуйте это. Откройте свой файл projectname.csproj, и он работает для меня.

<PackageReference Include="System.Data.SqlClient" Version="4.6.0" />

Вам необходимо добавить этот тег Reference " ItemGroup " внутрь.

Джишан Сиддик
источник