Làm thế nào để sử dụng SqlClient trong ASP.NET Core?


82

Tôi đang cố gắng sử dụng thư viện SQLClient trong ASP.net Core nhưng dường như không thể làm cho nó hoạt động. Tôi tìm thấy bài viết này trực tuyến hướng dẫn cách thiết lập nhưng nó không hoạt động với tôi: http://blog.developers.ba/using-classic-ado-net-in-asp-net-vnext/

Tôi có một gói ứng dụng bảng điều khiển đơn giản. Project.json của tôi trông như thế này:

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

Và tôi thử đoạn mã sau:

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

Nhưng gặp các lỗi sau:

nhập mô tả hình ảnh ở đây

Có ai khác làm việc này không?


1
Tôi không thấy tham chiếu đến System.Runtime trong bất kỳ phần phụ thuộc nào của bạn. Bạn đã thử thêm một cái chưa?
thorkia

1
Ngoài ra, bạn không thực hiện UPDATE, INSERT or DELETElệnh trong sql của mình, vậy tại sao bạn lại sử dụng command.ExecuteNonQuery();tra cứu bằng Fill()phương pháp trả về dữ liệu từ cơ sở dữ liệu hoặc phương thức ExecuteScalar nếu chỉ trả về một hàng. bạn cũng cần thêm các tham chiếu không chỉ vào using section in the .cs file class headermà còn thêm chúng theo cách thủ công vào referencenút trong dự án
MethodMan

1
Lỗi của bạn cho thấy bạn chưa thêm các tham chiếu thích hợp cho DNX 4.5.1. Bạn đang xây dựng cho hai loại dự án cùng một lúc. Nếu bạn không quan tâm đến DNX.4.5.1, hãy xóa nó khỏi cấu hình của bạn và nó sẽ được xây dựng.
thợ nề

1
Các bạn - cảm ơn các bạn rất nhiều! Đã xóa phần DNX 4.5.1 và thêm phần phụ thuộc của System.Runtime vào cài đặt và nó hoạt động hoàn hảo (tất cả đều là sau khi khởi động lại studio trực quan!). Cảm ơn một lần nữa !!!
Rob McCabe

Câu trả lời:


162

Tôi nghĩ rằng bạn có thể đã bỏ lỡ phần này trong hướng dẫn:

Thay vì tham chiếu System.Data và System.Data.SqlClient, bạn cần lấy từ Nuget:

System.Data.Common và System.Data.SqlClient.

Hiện tại, điều này tạo ra sự phụ thuộc trong phần project.json -> aspnetcore50 vào hai thư viện này.

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

Hãy thử tải System.Data.Common và System.Data.SqlClient qua Nuget và xem điều này có bổ sung các phụ thuộc ở trên cho bạn hay không, nhưng tóm lại là bạn đang thiếu System.Runtime.

Chỉnh sửa: Theo câu trả lời của Mozarts, nếu bạn đang sử dụng .NET Core 3+, hãy tham khảo Microsoft.Data.SqlClientthay thế.


6
Tôi chỉ phải thêm System.Data.SqlClientqua Nugetvà nó hoạt động với Dappertrong .NET Core 1.1.
Tadej

2
Tôi vừa thêm System.Data.SqlClient qua NuGet và nó hoạt động
Shahram

1
Điều này dường như đã được cố định trong .NET Core 2.0. Cho tôi ít nhất.
Tadej

Tôi đã sử dụng giao diện thay vì chỉnh sửa tệp cấu hình: nhấp chuột phải vào Phụ thuộc trong Giải pháp Explorer, NuGet ....
Evgeny Nozdrev

Tôi đã gặp sự cố khi thêm gói này với gói thêm Nuget hoặc dotnet. Một giải pháp là đặt trực tiếp phần phụ thuộc vào tệp dự án và thực hiện khôi phục - khôi phục dotnet. Tệp Nuget.config phải chứa nuget.org trong phần packageSources.
user2809176

65

Đối với Dot Net Core 3, nên sử dụng Microsoft.Data.SqlClient .


8
Nhận xét này là cứu cánh cho bất kỳ ai di chuyển từ .NET Core 2.2 sang .NET Core 3.0. Thay thế tất cả các tham chiếu từ System.Data.SqlClient thành Microsoft.Data.SqlClient.
Admir Tuzović

@mozart, .Net Core 2.2 có thể sử dụng Microsoft.Data.SqlClient không? hoặc Microsoft.Data.SqlClient chỉ được sử dụng cho .net Core 3?
Daleman

@Daleman Tôi đã giải quyết vấn đề này khi chuyển sang .Net Core 3 vì vậy tôi chưa thử nó với 2.2, tôi không nghĩ nó hoạt động "Mỗi tham số có một kiểu Dữ liệu phải không?", Nhưng bạn có thể thử.
Mozart Al Khateeb

@Mozar và kết nối của bạn với cơ sở dữ liệu vẫn sử dụng stringbuilder?
Daleman

@Daleman Nếu bạn muốn nói đến SqlConnectionStringBuilder, thì có sẵn trong NuGget này.
Mozart Al Khateeb

3

Hãy thử cái này Mở tệp projectname.csproj của bạn mà nó làm việc cho tôi.

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

Bạn cần thêm thẻ Tham chiếu " Nhóm mục " này vào bên trong.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.