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

Posted

技术标签:

【中文标题】如何在 ASP.NET Core 中使用 SqlClient?【英文标题】:How to use SqlClient in ASP.NET Core? 【发布时间】:2016-02-16 22:45:25 【问题描述】:

我正在尝试在 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();
        
    

但是得到以下错误:

还有其他人解决这个问题吗?

【问题讨论】:

我在您的任何依赖项中都没有看到对 System.Runtime 的引用。你试过添加一个吗? 你也没有在你的 sql 中执行UPDATE, INSERT or DELETE 命令,那么为什么你使用command.ExecuteNonQuery(); 查找使用Fill() 方法从数据库中返回数据,或者如果只返回一个 ExecuteScalar 方法单行。您不仅需要添加对using section in the .cs file class header 的引用,还需要手动将它们添加到项目中的reference 节点 您的错误表明您没有为 DNX 4.5.1 添加正确的参考。您正在同时构建两种项目类型。如果您不关心 DNX.4.5.1,请从您的配置中删除它,它应该会构建。 伙计们——非常感谢你们!删除了 DNX 4.5.1 部分,并将 System.Runtime 的依赖项添加到设置中,它运行良好(在 Visual Studio 重新启动后一切正常!)。再次感谢!!! 【参考方案1】:

我想你可能错过了教程中的这一部分:

您需要的不是引用 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

【讨论】:

我只需要通过Nuget 添加System.Data.SqlClient,它就可以在.NET Core 1.1 中与Dapper 一起使用。 我刚刚通过 Nuget 添加了 system.data.sqlclient 并且可以正常工作 这似乎已在 .NET Core 2.0 中修复。至少对我来说。 我使用界面而不是编辑配置文件:右键单击解决方案资源管理器中的依赖项,NuGet...。 我在使用 Nuget 或 dotnet add 包添加此包时遇到问题。一个解决方案是将依赖项直接放入项目文件并执行恢复 - dotnet restore。 Nuget.config 文件应在 packageSources 部分中包含 nuget.org。【参考方案2】:

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

【讨论】:

这条评论对于从 .NET Core 2.2 迁移到 .NET Core 3.0 的任何人来说都是救命稻草。将 System.Data.SqlClient 中的所有引用替换为 Microsoft.Data.SqlClient。 @mozart,.Net Core 2.2 可以使用 Microsoft.Data.SqlClient 吗?还是 Microsoft.Data.SqlClient 仅用于 .net Core 3? @Daleman 我在迁移到 .Net Core 3 时解决了这个问题,所以我没有用 2.2 尝试过,我认为它不起作用“每个参数都有一个数据类型吗?”,但是你可以试试看。 @Mozar,您与数据库的连接仍在使用 stringbuilder 吗? @SteveSmith 你可以查看链接中的文章。【参考方案3】:

试试这个 打开你的 projectname.csproj 文件 它对我有用。

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

你需要在里面添加这个引用“ItemGroup”标签。

【讨论】:

以上是关于如何在 ASP.NET Core 中使用 SqlClient?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 EF Core 在 ASP.NET Core 中取消应用迁移

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

如何在 ASP.NET Core 中使用 Route 特性

如何在 ASP.NET Core 3.1 中使用 Java?

如何在 ASP.NET Core 中使用区域

如何在 ASP.Net Core 中使用 条件中间件