Jak używać SqlClient w ASP.NET Core?

83

Próbuję użyć biblioteki SQLClient w ASP.net Core, ale wydaje się, że nie działa. Znalazłem ten artykuł w Internecie, który zawiera porady dotyczące konfiguracji, ale nie działa dla mnie: http://blog.developers.ba/using-classic-ado-net-in-asp-net-vnext/

Mam prosty pakiet aplikacji konsoli. Mój project.json wygląda następująco:

{
  "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"
      }
    }
  }
}

I próbuję następującego kodu:

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();
        }
    }
}

Ale uzyskaj następujące błędy:

wprowadź opis obrazu tutaj

Czy ktoś jeszcze sprawił, że to działa?

Rob McCabe
źródło
1
Nie widzę odniesienia do System.Runtime w żadnej z twoich zależności. Czy próbowałeś dodać jeden?
thorkia
1
również nie wykonujesz UPDATE, INSERT or DELETEpolecenia w swoim sql, więc dlaczego używasz command.ExecuteNonQuery();wyszukiwania przy użyciu Fill()metody zwracania danych z bazy danych lub metody ExecuteScalar, jeśli zwracasz tylko jeden wiersz. musisz również dodać odniesienia nie tylko do, using section in the .cs file class headerale także ręcznie dodać je do referencewęzła w projekcie
MethodMan
1
Twoje błędy wskazują, że nie dodano odpowiednich odniesień do DNX 4.5.1. Budujesz dla dwóch typów projektów w tym samym czasie. Jeśli nie obchodzi cię DNX.4.5.1, usuń go ze swojej konfiguracji i powinien się skompilować.
murarz
1
Chłopaki - bardzo wam wszystkim dziękuję! Usunięto sekcję DNX 4.5.1 i dodano zależność System.Runtime do ustawień i wszystko działało idealnie (wszystko po restarcie studia wizualnego!). Dzięki jeszcze raz!!!
Rob McCabe

Odpowiedzi:

163

Myślę, że mogłeś przegapić tę część w samouczku:

Zamiast odwoływać się do System.Data i System.Data.SqlClient, musisz pobrać z Nuget:

System.Data.Common i System.Data.SqlClient.

Obecnie tworzy to zależność w sekcji project.json -> aspnetcore50 do tych dwóch bibliotek.

"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"
       }
}

Spróbuj pobrać System.Data.Common i System.Data.SqlClient za pośrednictwem Nuget i zobacz, czy to dodaje powyższe zależności, ale w skrócie brakuje Ci System.Runtime.

Edycja: zgodnie z odpowiedzią Mozarts, jeśli używasz .NET Core 3+, Microsoft.Data.SqlClientzamiast tego odwołaj się.

MikeDub
źródło
6
Musiałem tylko dodać System.Data.SqlClientprzez Nugeti działa z Dapperw .NET Core 1.1.
Tadej
2
Właśnie dodałem system.data.sqlclient przez Nuget i działa
Shahram
1
Wydaje się, że zostało to naprawione w .NET Core 2.0. Przynajmniej dla mnie.
Tadej
Użyłem interfejsu zamiast edytować plik konfiguracyjny: kliknąłem prawym przyciskiem myszy Zależności w Eksploratorze rozwiązań, NuGet ....
Evgeny Nozdrev
Miałem problemy z dodaniem tego pakietu za pomocą pakietu Nuget lub dotnet add. Rozwiązaniem było prawidłowe umieszczenie zależności w pliku projektu i wykonanie przywracania - przywracanie dotnet. Plik nuget.config powinien zawierać nuget.org w sekcji packageSources.
user2809176
69

W przypadku Dot Net Core 3 należy użyć Microsoft.Data.SqlClient .

Mozart Al Khateeb
źródło
9
Ten komentarz jest ratunkiem dla każdego, kto przeprowadza migrację z .NET Core 2.2 do .NET Core 3.0. Zastąp wszystkie odwołania z System.Data.SqlClient do Microsoft.Data.SqlClient.
Admir Tuzović
@mozart, czy .Net Core 2.2 może używać Microsoft.Data.SqlClient? lub Microsoft.Data.SqlClient właśnie używany tylko dla .net Core 3?
Daleman
@Daleman Rozwiązałem ten problem podczas przechodzenia na .Net Core 3, więc nie próbowałem tego z wersją 2.2, nie sądzę, że to działa „Każdy parametr ma typ danych, prawda?”, Ale możesz spróbować.
Mozart Al Khateeb
@Mozar, a twoje połączenie z bazą danych nadal używa narzędzia stringbuilder?
Daleman
@Daleman Jeśli chodziło Ci o SqlConnectionStringBuilder, tak, to jest dostępne w tym NuGget.
Mozart Al Khateeb
3

Wypróbuj ten Otwórz plik nazwa_projektu.csproj dla mnie.

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

Musisz dodać ten znacznik odniesienia „ ItemGroup ” w środku.

jishan siddique
źródło