¿Cómo usar SqlClient en ASP.NET Core?

82

Estoy tratando de usar la biblioteca SQLClient en ASP.net Core pero parece que no puedo hacer que funcione. Encontré este artículo en línea que me aconseja cómo configurar, pero no me funciona: http://blog.developers.ba/using-classic-ado-net-in-asp-net-vnext/

Tengo un paquete de aplicación de consola simple. Mi project.json se ve así:

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

Y pruebo el siguiente código:

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

Pero obtén los siguientes errores:

ingrese la descripción de la imagen aquí

¿Alguien más consiguió que esto funcione?

Rob McCabe
fuente
1
No veo una referencia a System.Runtime en ninguna de sus dependencias. ¿Ha intentado agregar uno?
Thorkia
1
Además, no está haciendo un UPDATE, INSERT or DELETEcomando en su sql, entonces, ¿por qué está usando command.ExecuteNonQuery();buscar usando el Fill()método para devolver datos desde una base de datos o el método ExecuteScalar si devuelve solo una fila? también debe agregar referencias no solo al nodo using section in the .cs file class headersino también manualmente al referencenodo en el proyecto
MethodMan
1
Sus errores indican que no ha agregado las referencias adecuadas para DNX 4.5.1. Está construyendo para dos tipos de proyectos al mismo tiempo. Si no le importa DNX.4.5.1, elimínelo de su configuración y debería compilarse.
albañil
1
Chicos, ¡muchas gracias a todos! Se eliminó la sección DNX 4.5.1 y se agregó la dependencia de System.Runtime a la configuración y funcionó perfectamente (¡todo después de reiniciar Visual Studio!). ¡¡¡Gracias de nuevo!!!
Rob McCabe

Respuestas:

162

Creo que es posible que se haya perdido esta parte del tutorial:

En lugar de hacer referencia a System.Data y System.Data.SqlClient, debe tomar de Nuget:

System.Data.Common y System.Data.SqlClient.

Actualmente, esto crea dependencia en la sección project.json -> aspnetcore50 a estas dos bibliotecas.

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

Intente obtener System.Data.Common y System.Data.SqlClient a través de Nuget y vea si esto agrega las dependencias anteriores para usted, pero en pocas palabras, le falta System.Runtime.

Editar: según la respuesta de Mozarts, si está utilizando .NET Core 3+, haga referencia en su Microsoft.Data.SqlClientlugar.

MikeDub
fuente
6
Solo tuve que agregar System.Data.SqlClientvia Nugety funciona con Dapperin .NET Core 1.1.
Tadej
2
Acabo de agregar system.data.sqlclient a través de Nuget y funciona
Shahram
1
Esto parece estar arreglado .NET Core 2.0. Al menos para mí.
Tadej
Usé la interfaz en lugar de editar el archivo de configuración: hice clic con el botón derecho en Dependencias en el Explorador de soluciones, NuGet ....
Evgeny Nozdrev
Tuve problemas para agregar este paquete con Nuget o dotnet add package. Una solución fue poner la dependencia directamente en el archivo del proyecto y realizar una restauración: restauración dotnet. El archivo Nuget.config debe contener nuget.org en una sección packageSources.
user2809176
65

Para Dot Net Core 3, debe usarse Microsoft.Data.SqlClient .

Mozart Al Khateeb
fuente
8
Este comentario es un salvavidas para cualquiera que migre de .NET Core 2.2 a .NET Core 3.0. Reemplace todas las referencias de System.Data.SqlClient a Microsoft.Data.SqlClient.
Admir Tuzović
@mozart, ¿puede .Net Core 2.2 usar Microsoft.Data.SqlClient? o Microsoft.Data.SqlClient solo se usó solo para .net Core 3?
Daleman
@Daleman Resolví este problema mientras pasaba a .Net Core 3, así que no lo he probado con 2.2, no creo que funcione "Cada parámetro tiene un tipo de datos, ¿verdad?", Pero puedes intentarlo.
Mozart Al Khateeb
@Mozar, ¿y su conexión a la base de datos sigue usando el generador de cadenas?
Daleman
@Daleman Si te refieres a SqlConnectionStringBuilder, sí, eso está disponible en este NuGget.
Mozart Al Khateeb
3

Prueba este. Abre tu archivo projectname.csproj , funciona para mí.

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

Debe agregar esta etiqueta de referencia " ItemGroup " dentro.

jishan siddique
fuente