Detecting Changes with SqlDependency

Giám sát thay đổi của dữ liệu thông qua đối tượng SqlDependency trong .NET (Detecting Changes with SqlDependency)

Đối tượng SqlDependency có thể kết hợp với SqlCommand để giám sát được sự thay đổi của truy vấn so với truy vấn gốc.

Các bước dưới đây hướng dẫn qui trình thực hiện giám sát dữ liệu thay đổi

  1. Khởi tạo một kết nối SqlDependency với máy chủ (CSDL)
  2. Tạo đối tượng SqlConnection và SqlCommand để kết nối với máy chủ và định nghĩa câu truy vấn cần giám sát
  3. Tạo một đối tượng SqlDependency mới và ràng buộc nó với đối tượng SqlCommand
  4. Đăng ký sự kiện cho sự kiện OnChange của đối tượng SqlDependency
  5. Thực hiện câu lệnh bất kỳ (Execute) nào của đối tượng SqlCommand. Bởi vì lệnh này bị ràng buộc với đối tượng thông báo, máy chủ nhận ra rằng nó phải tạo ra một thông báo, và thông tin hàng đợi sẽ trỏ đến hàng đợi phụ thuộc
  6. Kết thúc, dừng giám sát của SqlDependency 

Mã nguồn tham khảo các bước thực hiện

void Initialization()  
{  
    // Create a dependency connection.  
    SqlDependency.Start(connectionString);  
}  
  
void SomeMethod()  
{  
    // Assume connection is an open SqlConnection.  
  
    // Create a new SqlCommand object.  
    using (SqlCommand command=new SqlCommand(  
        "SELECT ShipperID, CompanyName, Phone FROM dbo.Shippers",   
        connection))  
    {  
  
        // Create a dependency and associate it with the SqlCommand.  
        SqlDependency dependency=new SqlDependency(command);  
        // Maintain the refence in a class member.  
  
        // Subscribe to the SqlDependency event.  
        dependency.OnChange+=new  
           OnChangeEventHandler(OnDependencyChange);  
  
        // Execute the command.  
        using (SqlDataReader reader = command.ExecuteReader())  
        {  
            // Process the DataReader.  
        }  
    }  
}  
  
// Handler method  
void OnDependencyChange(object sender,   
   SqlNotificationEventArgs e )  
{  

if (e.Type == SqlNotificationType.Change)
{
NotificationHub nHub = new NotificationHub();
nHub.SendNotifications();
}
  // Handle the event (for example, invalidate this cache entry).  
}  
  
void Termination()  
{  
    // Release the dependency.  
    SqlDependency.Stop(connectionString);  
}
Advertisements

The Microsoft.Jet.OLEDB.4.0 – Microsoft.ACE.OLEDB.12.0 provider is not registered on the local machine

Khi sử dụng OLEDB gặp lỗi sau:

The Microsoft.Jet.OLEDB.4.0 hoặc Microsoft.ACE.OLEDB.12.0 provider is not registered on the local machine.

Nguyên nhân lỗi là do máy tính hiện tại đang sử dụng Offices 32 bit nhưng mặc định biên dịch của Visual Studio là Any CPU.

Để giải quyết vấn đề đó, thực hiện theo các hướng dẫn sau:

  • Chọn Project > Properties
  • Trong Tab Build, chọn Build – General
    • Platform target: chọn x86
    • Hình ảnh minh họa

target

  • Menu Build > Rebuild để biên dịch lại dựa án

Thông tin chuỗi kết nối – ConnectionString cấu hình như sau:

ConnectionString = “Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 8.0;data source= fullFileName”;

Nuget.config Error – Lỗi Nuget.config sau khi nâng câp VS 2015 community

Sau khi nâng cấp Visual Studio 2015 thì gặp phải lỗi sau: 

NuGet.Config is not valid XML PATH:

‘C:\Users\[Ten_Nguoi_Dung]\AppData\Roaming\NuGet\NuGet.Config’.

“.”,hexadecimal value 0x00, is an invalid character. Line 1, position 1.

I can not open the config file in any text editor. It open in Visual Studio as hexadecimal numbers.

I tried downloading and install NuGet and still the same results, and the same with uninstalling and reinstalling Visual Studio 2015 community.

This problem seems to have occurred after setting up Visual Studio for developing C/C++ applications.

Để khắc phục lỗi, cách đơn giản nhất và xóa luôn file Nuget.config trong thư mục ‘C:\Users\[Ten_Nguoi_Dung]\AppData\Roaming\NuGet\

.NET Core

.NET core là một nền tảng mới của Microsoft được thiết kế theo mô đun, độc lập nền tảng (cross platform) và kiến trúc nguồn mở. .Net cỏe bao gồm thư viện runtime, các lớp thư viện, trình biên dịch và công cụ cho phép xây dựng ứng dụng và biên dịch ra cho nhiều loại chip hoặc các nền tảng khác nhau, như: Windows, MacOS, Linux, …

.NET Core hỗ trợ trên các phiên bản hệ điều hành sau

OS Version Architectures Configurations
Windows Client 7 SP1 – 10 x64, x86
Windows Server 2008 R2 SP1 – 2016 x64, x86 Full, Server Core, Nano (2016 only)
Red Hat Enterprise Linux 7.2 x64
Fedora 23 x64
Debian 8.2 x64
Ubuntu 14.04 LTS, 16.04 LTS x64
Linux Mint 17 x64
openSUSE 13.2 x64
Centos 7.1 x64
Oracle Linux 7.1 x64
Mac OS X 10.11 (El Capitan) x64

Ví dụ sử dụng các thuộc tính của Data Annotation trong MVC Model

DataType : Chỉ ra kiểu dữ liệu

DisplayName : Đổi tên hiển thị của trường dữ liệu

DisplayFormat : Kiểu dữ liệu hiển thị

Required : Bắt buộc phải nhập dữ liệu

ReqularExpression : Dùng biểu thức RegularExpression để kiểm tra dữ liệu theo pattern

Range : Thiết lập phạm vi dữ liệu

StringLength : Độ dài của trường (tối đa, tối thiểu)

MaxLength : Kích thước tối đa của trường dữ liệu nhập vào

Bind : chỉ ra trường bind hoặc không bind dữ liệu cho data model

ScaffoldColumn : Ẩn hoặc hiển thị trường trên form

Ví dụ:

[Bind(Exclude = “EmployeeId”)]
public class Employee
{
[ScaffoldColumn(false)] //false: ẩn, true: hiển thị
public int EmployeeId { get; set; }

[DisplayName(“Employee Name”)]
[Required(ErrorMessage = “Employee Name is required”)]

[StringLength(100,MinimumLength=3)]
public String EmployeeName { get; set; }

[Required(ErrorMessage = “Employee Address is required”)]
[StringLength(300)]
public string Address { get; set; }

[Required(ErrorMessage = “Salary is required”)]
[Range(3000, 10000000,ErrorMessage = “Salary must be between 3000 and 10000000”)]
public int Salary{ get; set; }

[Required(ErrorMessage = “Please enter your email address”)]
[DataType(DataType.EmailAddress)]
[Display(Name = “Email address”)]
[MaxLength(50)]

[RegularExpression(@”[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}”, ErrorMessage = “Please enter correct email”)]

public string Email { get; set; }

}

Quan hệ nhiều nhiều trong Entity Framework – Junction table

Dưới đây hướng dẫn chúng ta cách thiết lập các thuộc tính cho bảng nối (junction table) có thêm các trường khác ngoài trường quan hệ.

Ví dụ: quan hệ nhiều nhiều giữa bảng Products – Orders

Bảng Products

    public class Product
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public float Price { get; set; }
        public int Quantity { get; set; }
        public ICollection<ProductOrders> Orders { get; set; }
    }

Bảng Orders

    public class Order
    {
        public int Id { get; set; }
        public DateTime OrderDate { get; set; }
        public virtual Customer Customer { get; set; }
        public ICollection<ProductOrders> Products { get; set; }
    }

Bảng ProductOrders

public class ProductOrders
{
        [Key, Column(Order = 0)]
        public int ProductID { get; set; }
        [Key, Column(Order = 1)]
        public int OrderID { get; set; }
        public int Quantity { get; set; }
        public float Price { get; set; }

        public virtual Product Product { get; set; }
        public virtual Order Order { get; set; }
}

Context class

1

 

Validation of viewstate MAC failed

Validation of viewstate MAC failed

Khi chạy ứng dụng gặp lỗi này, bạn vào file web.config, copy đoạn code dưới đây vào file web.config

<configurations>
   <system.web>
    <pages enableEventValidation="false" enableViewStateMac="false" viewStateEncryptionMode="Never">
    ... 
    </system.web> 
</configurations>

Hoặc thiết lập tùy chọn sau

<machineKey decryptionKey="A4B12CCDD50E95F8GB9GFH6JKAT4Y0U0I2OF2DF2AAFE5AB46189C,IsolateApps" validation="AES" validationKey="480CDF2AS9S9AS5CFDGF0GHFH9JJH4KHKAKLJ2L9F3SAS82A6C16911A29EF48903783F94529C21570AACB72766FB38CD4CE7B85B0ACE3149DC5FC1CCF1AA1CECE3579659996593B06,IsolateApps"/>