Як використовувати SqlClient в ASP.NET Core?


83

Я намагаюся використовувати бібліотеку SQLClient в ASP.net Core, але, здається, не можу змусити її працювати. Я знайшов цю статтю в Інтернеті, де порадив, як налаштувати, але вона не працює для мене: 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 до налаштувань, і він працював ідеально (все це буде після перезапуску Visual Studio!). Знову дякую!!!
Роб Маккейб,

Відповіді:


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.

Редагувати: Відповідно до відповіді Mozarts, якщо ви використовуєте .NET Core 3+, Microsoft.Data.SqlClientзамість цього зверніться.


6
Мені потрібно було лише додати System.Data.SqlClientчерез, Nugetі це працює з Dapperin .NET Core 1.1.
Тадей

2
Я щойно додав system.data.sqlclient через Nuget, і він працює
Shahram

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 Якщо ви мали на увазі SqlConnectionStringBuilder, так, це доступно в цьому NuGget.
Моцарт Аль Хатеб

3

Спробуйте цей. Відкрийте файл your projectname.csproj для мене.

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

Вам потрібно додати цей тег посилання " ItemGroup " всередину.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.