Quan hệ C# và Database – Sử dụng Assembly trong SQL
Sử dụng Csharp hay VB để gọi một hàm hoặc một thủ tục trong SQL thì không có gì khó khăn và chắc bạn đã thực hiện nhiều. Nhưng trong bài viết này tôi hướng dẫn bạn một cách để có thể dùng SQL để gọi hoặc thực thi hàm C#.
 

 

Trong các bài viết về Quan hệ C# và Database tôi đã trình bày về cách thực hiện kết nối C# với SQL server, SqlCommand và DataReaders và Dataset, ưu và khuyết điềm của chúng. Store Procedure, Trigger. Bài này ta sẽ tìm hiều cách thức để dùng SQL gọi hàm của C#, Điều này được thực hiện thông qua Assembly trong SQL bằng việc bạn viết các class trong C# cà build thành dll và add vào Assembly  của SQL.

 

Để dễ hiểu và giúp các bạn dễ áp dụng tôi sẽ làm 1 ví dụ minh họa đơn giản nhé

 

Mở Visual studio tạo mới 1 Project. Tôi minh họa bằng một Project đặt tên là Test, Trong Project tôi tạo một Class là MaHoa.cs và tôi viết một hàm để minh họa như sau:

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Security.Cryptography;

public class MaHoa
{
    public static string GetMaKhoa(string str)
    {
        UnicodeEncoding encoding = new UnicodeEncoding();
        Byte[] hashBytes = encoding.GetBytes(str);
        // Compute the SHA-1 hash
        SHA1CryptoServiceProvider sha1 = new SHA1CryptoServiceProvider();
        Byte[] cryptPassword = sha1.ComputeHash(hashBytes);
        return BitConverter.ToString(cryptPassword);
    }
}

   Class trên chỉ có 1 hàm đơn giản là mã hóa chuối str kiểu mã hóa SHA1 với SHA1CryptoServiceProvider. Build Project này ta sẽ được dll là Test.dll. Giờ ta sẽ thiết lập và add vào Assembly của SQL. Để thực hiện được ta cần thiết lập trong SQL như sau

Mở SQL server Surface Area Configuration. (Với SQL 2005)

BÀI VIẾT LIÊN QUAN Quan hệ C# và Database – Sử dụng Assembly trong SQL

 

Nhấn vào Surface Area Configuration Features, hộp thoại bật lên chọn CLR Integration, chọn Enable CRL interration

 

Quan hệ C# và Database – Sử dụng Assembly trong SQL

 

Tiếp theo chọn cơ sở dữ liệu của bạn, Chọn programmability, nhấn phải chuột vào Assembly chọn News Assembly…

 

Quan hệ C# và Database – Sử dụng Assembly trong SQL

 

Hộp thoại bật lên. Tại ô Assembly owner chọn dbo (Hoặc có thể chọn theo phân quyền của bạn bằng chọn vào dấu …). Tại ô Path to assembly chọn đến thư mục chứa dll của bạn

 

Quan hệ C# và Database – Sử dụng Assembly trong SQL

 

Giờ ta sẽ dùng SQL để truy vấn hàm GetMaHoa trong class ở trên. Tôi minh họa bằng cách viết một hàm GetMaHoa như sau:

 

CREATE FUNCTION fGetMaHoa
(
	@str [nvarchar](2000)
)
RETURNS [nvarchar](500) WITH EXECUTE AS CALLER
AS 
EXTERNAL NAME [Test].[MaHoa].[GetMaKhoa]

   Trong hàm GetMaHoa bằng C# ở trên nếu bạn gọi string str = MaHoa.GetMaKhoa(“abc123”);  khi đó chuỗi str của bạn có giá trị là 68-93-07-D2-FC-53-AF-0F-B9-41-BC-1B-B4-27-37-CE-4F-3E-F5-40  Đây chính là chuỗi kết quả khi mã hóa abc123 kiểu mã hóa SHA1. 
 Còn trong SQL bạn gọi hàm như sau Select dbo.fGetMaHoa(‘abc123’) Khi đó kết quả cũng tương tự nhu khi bạn dùng C#.

Quan hệ C# và Database – Sử dụng Assembly trong SQL

   Trên đây là một ví dụ minh họa đơn giản bằng việc viết 1 hàm mã hóa bằng Csharp và dùng SQL để gọi hàm đó. Bạn có thể ứng dụng ví dụ này để viết các hàm và thực thi trong SQL. Chúc các bạn thành công .

Link dowload Project test ở trên :

 

 

http://www.mediafire.com/download/1iby1fwp7o9569w/Test.rar

ĐỂ LẠI PHẢN HỒI CỦA BẠN TẠI ĐÂY

Phản hồi về bài viết này

NO COMMENTS

LEAVE A REPLY


*