CLR-Stored Procedures

CLR stored procedures là gì?

CLR stored procedures là stored procedure được tạo bởi managed code (C#, VB.NET, …)

Khi nào sử dụng CLR stored procedures?

Khi stored procedure không viết được với T-SQL

Cách tạo clr stored procedures?

Các bước dưới đây hướng dẫn cách xây dựng CLR – Stored Procedured

1. Tạo Database project trong C# và viết mã như sau

using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;

public partial class StoredProcedures
{
[Microsoft.SqlServer.Server.SqlProcedure]
public static void SqlStoredProcedure1 ()
{
SqlPipe pipe = SqlContext.Pipe;
pipe.Send(“Hello world”);
}
}

2. Viết mã trong SQL Server

clrSP

DeSerialize Json data – firebase

Mã nguồn dưới đây hướng dẫn cách Deserialize Json data đọc từ firebase

Tạo lớp Firebaseroot và các thuộc tính như dưới đây

public class Todo
{
public string name;
public int priority;
}

Khai báo FirebaseConfig

IFirebaseConfig config = new FirebaseConfig
{
AuthSecret = “your-secret-key”,
BasePath = “your-firebase-url/”
};

Mã nguồn để đọc dữ liệu từ firebase và deserialize

IFirebaseClient client = new FirebaseClient(config);
FirebaseResponse response = client.Get(“todo”);//Key to read from Firebase

Dictionary<string, Todo> entryDict = JsonConvert.DeserializeObject<Dictionary<string, Todo>>(response.Body);

List<Todo> entries = entryDict.Select(x => x.Value).ToList();

foreach (var item in entries)
{
this.listBox1.Items.Add(item.name); //Add item into ListBox1
}

Sử dụng Firebase với FireSharp

Các bước dưới đây hướng dẫn bạn sử dụng Firebase với FireSharp trong .NET (C#,VB.NET).

Các bước thực hiện:

  • Cài đặt thư viện FireSharp bằng cách mở Package NuGet Manager Console

Install-Package FireSharp

  • Thiết lập cấu hình và khai báo đối tượng FirebaseClient
 IFirebaseConfig config = new FirebaseConfig
  {
     AuthSecret = "your_firebase_secret",
     BasePath = "https://yourfirebase.firebaseio.com/"
  };
IFirebaseClient  client = new FirebaseClient(config);
  •  Thêm dữ liệu vào Firebase với PUSH method
var todo = new Todo
 {
 name = "Execute PUSH",
 priority = 2
 };
 PushResponse response = client.Push("Key", todo);
  • Update firebase data với Set method
 var todo = new Todo
 {
 name = "Execute SET",
 priority = 2
 };
 SetResponse response = client.Set("key", todo);
  • Get data from Firebase
 FirebaseResponse response = await _client.GetAsync("todos/set");
 Todo todo=response.ResultAs<Todo>(); //The response will contain the data being retreived

Partial Method

Partial method là cách định nghĩa phương thức và cài đặt phương thức ở 2 nơi khác nhau.

Partial methods cho phép người thiết kế định nghĩa các phương thức và để lại phần cài đặt cho các lập trình viên có thể cài đặt hoặc không cài đặt partial method đó. Nếu lập trình viên không cài đặt các partial methods thì khi biên dịch, compiler sẽ remove partial method đó đi. Dưới đây là các điều kiện bắt buộc phải tuân theo khi sử dụng partial methods:

  • Signatuares trong tất cả các khai báo phải giống nhau
  • Kiểu trả về luôn là void
  • Không cho phép sử dụng access modifiers (Partial method luôn ngầm định private)

Ví dụ dưới đây minh họa định nghĩa partial method trong partial class

namespace PM
{
 partial class A
 {
 partial void OnSomethingHappened(string s);
 }
 // This part can be in a separate file.
 partial class A
 {
 // Comment out this method and the program
 // will still compile.
 partial void OnSomethingHappened(String s)
 {
 Console.WriteLine("Something happened: {0}", s);
 }
 }
}

Extension methods

Extension methods cho phép bạn thêm các phương thức vào các kiểu dữ liệu hiện có mà không cần tạo một kiểu dẫn xuất mới, biên dịch lại hoặc sửa đổi kiểu gốc.

Extension methods khai báo static, nhưng chúng được gọi như instance methods

Extension method là phương thức static của lớp static, từ khóa this áp dụng cho tham số đầu tiên của  phương thức. Kiểu của tham số đầu sẽ được mở rộng phương thức đó.

public static class ExtensionMethodDemo
{
    public static string UppercaseFirstLetter(this string value)
    {
        // Uppercase the first letter in the string.
        if (value.Length > 0)
        {
            char[] array = value.ToCharArray();
            array[0] = char.ToUpper(array[0]);
            return new string(array);
        }
        return value;
    }
}

class Program
{
    static void Main()
    {
        // Use the string extension method on this value.
        string value = "hello world!";
        value = value.UppercaseFirstLetter();
        Console.WriteLine(value);
    }
}

Biểu thức Lambda

The term ‘Lambda expression’ has derived its name from ‘lambda’ calculus which in turn is a mathematical notation applied for defining functions. Lambda expressions as a LINQ equation’s executable part translate logic in a way at run time so it can pass on to the data source conveniently

  • These expressions are expressed by the following syntax:

  (input parameters) => expression or statement block

  • Below is an example of lambda ex pression

y => y * y

lambda

Anonymous Types – C#

Kiểu dữ liệu Anonymous cung cấp một cách thuận tiện để gói tập các thuộc tính chỉ đọc vào một đối tượng đơn lẻ mà không cần định nghĩa rõ ràng một kiểu trước. Tên loại được tạo ra bởi trình biên dịch và không có sẵn ở mã nguồn (tìm trong mã nguồn không có kiểu đó). Kiểu dữ liệu của mỗi thuộc tính được suy ra bởi trình biên dịch.

Bạn tạo kiểu Anonymous bằng cách sử dụng toán tử new cùng với một đối tượng khởi tạo

var v = new { Amount = 108, Message = “Hello” };

Console.WriteLine(v.Amount + v.Message);