如何在ASP.NET Core中使用SqlClient?


82

我正在尝试在ASP.net Core中使用SQLClient库,但似乎无法正常工作。我在网上找到了这篇文章,以提供有关如何设置的建议,但不适用于我: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 '16

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重新启动之后完成!)。再次感谢!!!
罗伯·麦卡布

Answers:


162

我认为您可能已经错过了本教程中的这一部分:

无需引用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"
       }
}

尝试通过Nuget获取System.Data.Common和System.Data.SqlClient ,看看是否为您添加了以上依赖关系,但总的来说,您缺少System.Runtime。

编辑:根据Mozarts的答案,如果您使用的是.NET Core 3+,请参考Microsoft.Data.SqlClient


6
我只需要添加System.Data.SqlClientvia Nuget,它就可以Dapper在中使用.NET Core 1.1
Tadej

2
我刚刚通过Nuget添加了system.data.sqlclient,它起作用了
Shahram

1
这似乎已修复.NET Core 2.0。至少对我来说。
塔德伊

我使用界面而不是编辑配置文件:在解决方案资源管理器NuGet ...中的Dependencies上单击鼠标右键。
Evgeny Nozdrev

我在使用Nuget或dotnet add软件包添加此软件包时遇到问题。一种解决方案是将依赖项直接放入项目文件中,然后执行还原-dotnet restore。Nuget.config文件应在packageSources部分中包含nuget.org。
user2809176

65

对于Dot Net Core 3,应使用Microsoft.Data.SqlClient


8
对于从.NET Core 2.2迁移到.NET Core 3.0的任何人,此注释都可以挽救生命。将所有引用从System.Data.SqlClient替换为Microsoft.Data.SqlClient。
AdmirTuzović19年

@ mozart,.Net Core 2.2可以使用Microsoft.Data.SqlClient吗?或仅用于.net Core 3的Microsoft.Data.SqlClient?
达勒曼

@Daleman我在移至.Net Core 3时解决了此问题,因此我没有在2.2上尝试过,我认为它不起作用“每个参数的数据类型正确吗?”,但是您可以尝试一下。
莫扎特·阿勒哈提卜

@Mozar,您是否仍使用stringbuilder连接数据库?
达勒曼

@Daleman如果您的意思是SqlConnectionStringBuilder,是的,此NuGget中可用。
Mozart Al Khateeb

3

试试这个打开我的projectname.csproj文件。

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

您需要在其中添加此引用“ ItemGroup ”标记。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.