Wie verwende ich SqlClient in ASP.NET Core?

82

Ich versuche, die SQLClient-Bibliothek im ASP.net Core zu verwenden, aber es scheint nicht zu funktionieren. Ich fand diesen Artikel online, in dem empfohlen wurde, wie er eingerichtet werden soll, aber er funktioniert bei mir nicht: http://blog.developers.ba/using-classic-ado-net-in-asp-net-vnext/

Ich habe ein einfaches Konsolenanwendungspaket. Meine project.json sieht folgendermaßen aus:

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

Und ich versuche den folgenden Code:

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

Aber bekomme die folgenden Fehler:

Geben Sie hier die Bildbeschreibung ein

Hat sonst noch jemand das zum Laufen gebracht?

Rob McCabe
quelle
1
Ich sehe in keiner Ihrer Abhängigkeiten einen Verweis auf System.Runtime. Haben Sie versucht, eine hinzuzufügen?
Thorkia
1
Außerdem führen Sie UPDATE, INSERT or DELETEin Ihrem SQL keinen Befehl aus. Warum verwenden Sie die command.ExecuteNonQuery();Suche mit der Fill()Methode zum Zurückgeben von Daten aus einer Datenbank oder der ExecuteScalar-Methode, wenn Sie nur eine einzelne Zeile zurückgeben? Sie müssen auch Verweise nicht nur auf die using section in the .cs file class headerhinzufügen, sondern auch manuell zum referenceKnoten im Projekt
hinzufügen
1
Ihre Fehler weisen darauf hin, dass Sie nicht die richtigen Referenzen für DNX 4.5.1 hinzugefügt haben. Sie erstellen für zwei Projekttypen gleichzeitig. Wenn Sie sich nicht für DNX.4.5.1 interessieren, entfernen Sie das aus Ihrer Konfiguration und es sollte erstellt werden.
Maurer
1
Leute - vielen Dank! Der Abschnitt DNX 4.5.1 wurde entfernt und die Abhängigkeit von System.Runtime zu den Einstellungen hinzugefügt, und es funktionierte einwandfrei (alles nach einem Neustart von Visual Studio!). Danke noch einmal!!!
Rob McCabe

Antworten:

162

Ich denke, Sie haben diesen Teil im Tutorial möglicherweise verpasst:

Anstatt auf System.Data und System.Data.SqlClient zu verweisen, müssen Sie von Nuget greifen:

System.Data.Common und System.Data.SqlClient.

Derzeit entsteht im Abschnitt project.json -> aspnetcore50 eine Abhängigkeit von diesen beiden Bibliotheken.

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

Versuchen Sie, System.Data.Common und System.Data.SqlClient über Nuget abzurufen, und prüfen Sie, ob dadurch die oben genannten Abhängigkeiten für Sie hinzugefügt werden. Kurz gesagt, Sie vermissen System.Runtime.

Bearbeiten: Laut Mozarts-Antwort verweisen Sie Microsoft.Data.SqlClientstattdessen auf .NET Core 3+, wenn Sie .NET Core 3+ verwenden.

MikeDub
quelle
6
Ich musste nur System.Data.SqlClientvia hinzufügen Nugetund es funktioniert mit Dapperin .NET Core 1.1.
Tadej
2
Ich habe gerade system.data.sqlclient über Nuget hinzugefügt und es funktioniert
Shahram
1
Dies scheint behoben zu sein .NET Core 2.0. Für mich zumindest.
Tadej
Ich habe die Schnittstelle verwendet, anstatt die Konfigurationsdatei zu bearbeiten: Klicken Sie mit der rechten Maustaste auf Abhängigkeiten im Projektmappen-Explorer, NuGet ....
Evgeny Nozdrev
Ich hatte Probleme beim Hinzufügen dieses Pakets mit Nuget oder Dotnet Add Package. Eine Lösung bestand darin, die Abhängigkeit direkt in die Projektdatei einzufügen und eine Wiederherstellung durchzuführen - Dotnet-Wiederherstellung. Die Datei Nuget.config sollte nuget.org in einem packageSources-Abschnitt enthalten.
user2809176
65

Für Dot Net Core 3 sollte Microsoft.Data.SqlClient verwendet werden.

Mozart Al Khateeb
quelle
8
Dieser Kommentar ist lebensrettend für alle, die von .NET Core 2.2 auf .NET Core 3.0 migrieren. Ersetzen Sie alle Verweise von System.Data.SqlClient auf Microsoft.Data.SqlClient.
Admir Tuzović
@mozart, kann .Net Core 2.2 Microsoft.Data.SqlClient verwenden? oder Microsoft.Data.SqlClient nur für .net Core 3 verwendet?
Daleman
@Daleman Ich habe dieses Problem beim Wechsel zu .Net Core 3 gelöst, habe es also nicht mit 2.2 ausprobiert. Ich glaube nicht, dass es funktioniert. "Jeder Parameter hat einen Datentyp, oder?", Aber Sie können es versuchen.
Mozart Al Khateeb
@Mozar und Ihre Verbindung zur Datenbank mit Stringbuilder?
Daleman
@ Daleman Wenn Sie SqlConnectionStringBuilder gemeint haben, ja, das ist in diesem NuGget verfügbar.
Mozart Al Khateeb
3

Versuchen Sie dies. Öffnen Sie Ihre Datei projectname.csproj , die für mich funktioniert.

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

Sie müssen dieses Referenz- Tag " ItemGroup " hinzufügen .

Jishan Siddique
quelle