Welcome to my blog!

Format DateTime in C#

June 30, 2020 11:57

Date Format in CSharp (edit)

Utils Class

namespace ConsoleApp1
internal class Program
private static void Main(string[] args)
var dtHddt = new System.Data.DataTable();

dtHddt.Columns.Add("Dosage", typeof(int));
dtHddt.Columns.Add("Drug", typeof(string));
dtHddt.Columns.Add("Patient", typeof(string));
dtHddt.Columns.Add("commandDate", typeof(System.DateTime));

dtHddt.Rows.Add(25, "Indocin", "David", null);
dtHddt.Rows.Add(50, "Enebrel", "Sam", System.DateTime.Now);
dtHddt.Rows.Add(10, "Hydralazine", "Christoff", System.DateTime.Now);
dtHddt.Rows.Add(21, "Combivent", "Janet", System.DateTime.Now);
dtHddt.Rows.Add(100, "Dilantin", "Melanie", System.DateTime.Now);

string s = string.Empty;
for (int i = 0; i < dtHddt.Rows.Count; i++)
s = dtHddt.GetSafeDate(i, "commandDate");

public static class DataTableExt
public static string GetSafeDate(this System.Data.DataTable dt, int idx, string colName)
string s = string.Empty;
if (dt != null &&
dt.Rows.Count > 0 &&
dt.Rows[idx][colName] != null &&
dt.Rows[idx][colName] != System.DBNull.Value)
var myDateTime = System.Convert.ToDateTime(dt.Rows[idx][colName]);
s = myDateTime.ToString("dd/MM/yyyy hh:mm:ss tt", System.Globalization.CultureInfo.InvariantCulture);
catch (System.Exception ex)
return s;


dtHddt: System.Data.DataTable
string s = dtHddt.GetSafeDate(0, "commandDate");

Điểm mới trong .NET Core (C#)

July 27, 2018 10:25

Điểm mới trong .NET Core (C#) (edit)

Hôm nay mình sẽ giới thiệu từ mới để các bạn tự khám phá trong ASP.NET Core 2.1

  • Span<T>
  • Memory<T>
  • ReadOnlySpan<T>


// Normal way
public string FullName
    get { return string.Format("{0} {1}", FirstName, LastName); }
// Using Expression (C# 6.0)
public string FullName => string.Format("{0} {1}", FirstName, LastName);
// Above code can be more consize using string interpolation
public string FullName =>$"{FirstName} {LastName}";


// Normal way
public string GetFullName(string firstname, string middleName, string lastName)
    return middleName == null ? $"{firstname} {lastName}" : $"{firstname} {middleName} {lastName}";
// Using Expessions
public string GetFullName(string firstname, string middleName, string lastName) => middleName == null ?
             $"{firstname} {lastName}" : $"{firstname} {middleName} {lastName}";

Auto properties

public string Name { get; set; }

Constructor (hàm tạo)

// Earlier
public Person(string name)
    this.Name = name;
// With C# 7.0
public Person(string name) => this.Name = name;

Destructor (hàm hủy)

// Earlier
    Console.WriteLine("Person's destructor");
// Using Expressions
~Person() => Console.WriteLine("Person's destructor");

Readonly struct

public readonly struct Person
    public string FirstName { get; }
    public string LastName { get; }
    public int Age { get; }
    public Person(string firstName, string lastName, int age)
        this.FirstName = firstName;
        this.LastName = lastName;
        this.Age = age;

Ôn lại lý thuyết về Const, ReadOnly, Static và Struct

Const là một hằng số phải gán giá trị khi khai báo (complie-time constant). Mặc định const là static nên không thể thêm static trước hoặc sau const

ReadOnly là một biến được khởi tạo giá trị khi khai báo và có thể thay đổi giá trị ở hàm tạo (run-time constant).

Static đưa vào trước biến để mọi đối tượng đều có thể truy xuất vào. Chỉ áp dụng cho class, fields, properties, operators, events, constructor, không áp dụng được cho destructor và index


Kinh nghiệm xử lý try catch throw exception

Đơn giản chỉ cần "throw;" try { ... } catch (Exception ex) { throw; }

Nếu sử dụng "throw ex;" sẽ mất stack trace dẫn đến việc debug lỗi gặp khó khăn.

Kinh nghiệm xử lý Concurrency Conflickts trong EF Core


Kinh nghiệm xử lý Concurrency Conflicts trong EF 6


Làm thế nào để kiểm soát optimistic concurrency.

Bạn cần có một cột rowversion là một kiểu dữ liệu timestamp.

SQL Server tự động khởi tạo số nhị phân duy nhất bất cứ khi nào thao tác insert hoặc update được thực hiện trong một bảng.


Technical Stack là gì?

Stack là gì? Stack là một nền tảng hệ điều hành và những phần mềm đi kèm

ELK Stack là gì?

ELK Stack là tập hợp 3 phần mềm đi chung với nhau, phục vụ cho công việc logging. Ba phần mềm này lần lượt là:

  • Elasticsearch: Cơ sở dữ liệu để lưu trữ, tìm kiếm và query log
  • Logstash: Tiếp nhận log từ nhiều nguồn, sau đó xử lý log và ghi dữ liệu và Elasticsearch
  • Kibana: Giao diện để quản lý, thống kê log. Đọc thông tin từ Elasticsearch

SQL tiếng Việt


Xóa log file của SQL Server



Các loại Local Cache Store

  • In-process
  • Out-of-process

Các loại Remote Cache

  • Memcached
  • Azure
  • DiskCache
  • Redis

Top 10 OWASP (link tiếng Việt)

  1. Injection
  2. Cross-Site Scripting (XSS)
  3. Broken Authentication and Session Management
  4. Insecure Direct Object References
  5. Cross-Site Request Forgery (CSRF)
  6. Security Misconfiguration
  7. Insecure Cryptographic Storage
  8. Failure to Restrict URL Access
  9. Insufficient Transport Layer Protection
  10. Unvalidated Redirects and Forwards

Tìm hiểu thêm

C# 6.0 features

C# 7.X features

Dapper Log4net AutoMapper

March 13, 2018 08:35

How to use the Dapper (edit)

- Create new ASP.NET Web Application called WebApplication1 (MVC: Web Forms, MVC, Web API) based on .NET Framework 4.5.2

- Nuget packages:

  + Install-Package log4net

  + Install-Package Dapper

  + Install-Package MySql.Data

  + Install-Package AutoMapper

  + Install-Package Newtonsoft.Json

- Web.config/App.config

  + Define connection string in <connectionStrings> or <appSettings>

- Controllers/HomeController.cs

- Documentation

Dapper with MS SQL Server

- Dapper with raw SQL


- Dapper with Stored Procedure

- Sample code

Dapper with MySQL

Nuget notes

+ .NET Framework 4.5
+ ASP.NET Web API 2.2
+ Web Pages 3.2

Install-Package jQuery -Version 1.12.4
Install-Package Bootstrap -version 3.3.7
Install-Package modernizr
Install-Package Newtonsoft.json
Install-Package log4net
Install-Package Dapper -Version 1.50.2 (.NET Framework 4.5)
Install-Package Microsoft.AspNet.WebApi (-Version 5.2.4)
Install-Package Swashbuckle (-Version 5.6.0)

Web API & Swagger + OAuth2





May 19, 2017 10:22


- Asynchronous & parallel programming
- Async Landscape in .NET
- Thread & Thread pool
- ParallelFor & ParallelForEach
- ParallelInvoke
- Parallel LINQ (PLinQ)
- Lambda expression
- Some new features on C#6

Programming with C#

May 15, 2017 01:22

C# Programming Guide


Programming with C#

About this course

Skip Course Description


To help ensure that your learning experience is good, please note that this course is not for beginners or those new to programming. You must have prior programming experience in an object-oriented programming language as there are concepts that are mentioned in the course that are assumed to be prior knowledge and are not explained in detail. If you are new to programming, it is highly recommended that you visit this page to learn some of the fundamentals first.

Learning C# provides a solid foundation in object-oriented programming knowledge, paves the way for learning other programming languages, and positions those who complete this course for a wide variety of in-demand computer programming jobs.  
The C# programming language was created to be an object-oriented programming language that offers ease of use, familiarity to C/C++ and Java developers, along with enhanced memory and resource management.  C# is prevalent on the Microsoft platform but is also being used to develop software that runs on Linux, Android, and iOS devices.  
This course aims to teach the basics of C# all the way through the advanced features of the language. 
This course is not a beginner course on C#, although beginners can still learn a lot from the material. It is intended to provide an introduction to the C# language and the world of .NET programming for existing programmers who need or want to learn more about C# and managed code development.


What you'll learn

  • C# Syntax
  • C# Language Fundamentals
  • OOP in C#
  • .NET Framework concepts


Recent posts