- [SQLSERVER] Loại bỏ Restricted User trên database MSSQL
- [C#] Hướng dẫn tạo mã QRcode Style trên winform
- [C#] Hướng dẫn sử dụng temp mail service api trên winform
- [C#] Hướng dẫn tạo mã thanh toán VietQR Pay không sử dụng API trên winform
- [C#] Hướng Dẫn Tạo Windows Service Đơn Giản Bằng Topshelf
- [C#] Chia sẻ source code đọc dữ liệu từ Google Sheet trên winform
- [C#] Chia sẻ source code tạo mã QR MOMO đa năng Winform
- [C#] Chia sẻ source code phần mềm lên lịch tự động chạy ứng dụng Scheduler Task Winform
- [Phần mềm] Tải và cài đặt phần mềm Sublime Text 4180 full version
- [C#] Hướng dẫn download file từ Minio Server Winform
- [C#] Hướng dẫn đăng nhập zalo login sử dụng API v4 trên winform
- [SOFTWARE] Phần mềm gởi tin nhắn Zalo Marketing Pro giá rẻ mềm nhất thị trường
- [C#] Việt hóa Text Button trên MessageBox Dialog Winform
- [DEVEXPRESS] Chia sẻ code các tạo report in nhiều hóa đơn trên XtraReport C#
- [POWER AUTOMATE] Hướng dẫn gởi tin nhắn zalo từ file Excel - No code
- [C#] Chia sẻ code lock và unlock user trong domain Window
- [DEVEXPRESS] Vẽ Biểu Đồ Stock Chứng Khoán - Công Cụ Thiết Yếu Cho Nhà Đầu Tư trên Winform
- [C#] Hướng dẫn bảo mật ứng dụng 2FA (Multi-factor Authentication) trên Winform
- [C#] Hướng dẫn convert HTML code sang PDF File trên NetCore 7 Winform
- [C#] Hướng dẫn viết ứng dụng chat với Gemini AI Google Winform
[C#] Chia sẽ tool POCO tạo class object từ table Sqlserver
Xin chào các bạn, bài viết hôm nay mình chia sẻ đến các bạn tools tạo class object từ table Sqlserver trong lập trình C#, Winform.
[C#] Create class object from table sqlserver
Trong lập trình ứng dụng, nếu bạn nào đang sử dụng Entity Framework để phát triển cho dự án của mình thì trong Entity đã có sẵn chức năng Migrate data to model object.
Tuy nhiên, nếu các nào đang sử dụng Dapper hoặc muốn tạo một class Object nhanh chóng từ Table Sqlserver, các bạn có thể downlaod tool bên dưới về để sử dụng.
Hoặc các bạn có thể tùy chỉnh lại theo nhu cầu sử dụng của mình.
Trong demo ứng phần mềm, mình có sử dụng công cụ CodeEditor để hiển thị code: Công cụ đó là ScintillaNET, các bạn có thể từ khóa này tìm trên github để tham khảo nhé.
Dưới đây là giao diện demo ứng:
Để sử dụng, các bạn nhập các thông tin kết nối database vào, xong chọn table cần tạo class để sử dụng.
Video demo ứng dụng:
Source code C# tạo class object từ sqlserver:
using Microsoft.SqlServer.Management.Common;
using Microsoft.SqlServer.Management.Smo;
using ScintillaNET;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace POCOTemplate
{
public partial class Form1 : Form
{
public Server srv;
public string databaseName;
public Form1()
{
InitializeComponent();
}
public static string GetNetDataType(string sqlDataTypeName)
{
switch (sqlDataTypeName.ToLower())
{
case "bigint":
return "Int64";
case "binary":
return "Byte[]";
case "bit":
return "bool";
case "char":
return "char";
case "cursor":
return string.Empty;
case "datetime":
return "DateTime";
case "decimal":
return "Decimal";
case "float":
return "Double";
case "int":
return "int";
case "money":
return "Decimal";
case "nchar":
return "string";
case "numeric":
return "Decimal";
case "nvarchar":
return "string";
case "real":
return "single";
case "smallint":
return "Int16";
case "text":
return "string";
case "tinyint":
return "Byte";
case "varbinary":
return "Byte[]";
case "xml":
return "string";
case "varchar":
return "string";
case "smalldatetime":
return "DateTime";
case "image":
return "byte[]";
default:
return string.Empty;
}
}
public static Color IntToColor(int rgb)
{
return Color.FromArgb(255, (byte)(rgb >> 16), (byte)(rgb >> 8), (byte)rgb);
}
public void InitSettingCodeEditor()
{
rtbResult.StyleResetDefault();
rtbResult.Styles[Style.Default].Font = "Consolas";
rtbResult.Styles[Style.Default].Size = 10;
rtbResult.Styles[Style.Default].BackColor = IntToColor(0x212121);
rtbResult.Styles[Style.Default].ForeColor = IntToColor(0xFFFFFF);
rtbResult.StyleClearAll();
// Configure the CPP (C#) lexer styles
rtbResult.Styles[Style.Cpp.Identifier].ForeColor = IntToColor(0xD0DAE2);
rtbResult.Styles[Style.Cpp.Comment].ForeColor = IntToColor(0xBD758B);
rtbResult.Styles[Style.Cpp.CommentLine].ForeColor = IntToColor(0x40BF57);
rtbResult.Styles[Style.Cpp.CommentDoc].ForeColor = IntToColor(0x2FAE35);
rtbResult.Styles[Style.Cpp.Number].ForeColor = IntToColor(0xFFFF00);
rtbResult.Styles[Style.Cpp.String].ForeColor = IntToColor(0xFFFF00);
rtbResult.Styles[Style.Cpp.Character].ForeColor = IntToColor(0xE95454);
rtbResult.Styles[Style.Cpp.Preprocessor].ForeColor = IntToColor(0x8AAFEE);
rtbResult.Styles[Style.Cpp.Operator].ForeColor = IntToColor(0xE0E0E0);
rtbResult.Styles[Style.Cpp.Regex].ForeColor = IntToColor(0xff00ff);
rtbResult.Styles[Style.Cpp.CommentLineDoc].ForeColor = IntToColor(0x77A7DB);
rtbResult.Styles[Style.Cpp.Word].ForeColor = IntToColor(0x48A8EE);
rtbResult.Styles[Style.Cpp.Word2].ForeColor = IntToColor(0xF98906);
rtbResult.Styles[Style.Cpp.CommentDocKeyword].ForeColor = IntToColor(0xB3D991);
rtbResult.Styles[Style.Cpp.CommentDocKeywordError].ForeColor = IntToColor(0xFF0000);
rtbResult.Styles[Style.Cpp.GlobalClass].ForeColor = IntToColor(0x48A8EE);
rtbResult.Lexer = Lexer.Cpp;
rtbResult.SetKeywords(0, "class extends implements import interface new case do while else if for in switch throw get set function var try catch finally while with default break continue delete return each const namespace package include use is as instanceof typeof author copy default deprecated eventType example exampleText exception haxe inheritDoc internal link mtasc mxmlc param private return see serial serialData serialField since throws usage version langversion playerversion productversion dynamic private public partial static intrinsic internal native override protected AS3 final super this arguments null Infinity NaN undefined true false abstract as base bool break by byte case catch char checked class const continue decimal default delegate do double descending explicit event extern else enum false finally fixed float for foreach from goto group if implicit in int interface internal into is lock long new null namespace object operator out override orderby params private protected public readonly ref return switch struct sbyte sealed short sizeof stackalloc static string select this throw true try typeof uint ulong unchecked unsafe ushort using var virtual volatile void while where yield");
rtbResult.SetKeywords(1, "void Null ArgumentError arguments Array Boolean Class Date DefinitionError Error EvalError Function int Math Namespace Number Object RangeError ReferenceError RegExp SecurityError String SyntaxError TypeError uint XML XMLList Boolean Byte Char DateTime Decimal Double Int16 Int32 Int64 IntPtr SByte Single UInt16 UInt32 UInt64 UIntPtr Void Path File System Windows Forms ScintillaNET");
}
#region Numbers, Bookmarks, Code Folding
/// <summary>
/// the background color of the text area
/// </summary>
private const int BACK_COLOR = 0x2A211C;
/// <summary>
/// default text color of the text area
/// </summary>
private const int FORE_COLOR = 0xB7B7B7;
/// <summary>
/// change this to whatever margin you want the line numbers to show in
/// </summary>
private const int NUMBER_MARGIN = 1;
/// <summary>
/// change this to whatever margin you want the bookmarks/breakpoints to show in
/// </summary>
private const int BOOKMARK_MARGIN = 2;
private const int BOOKMARK_MARKER = 2;
/// <summary>
/// change this to whatever margin you want the code folding tree (+/-) to show in
/// </summary>
private const int FOLDING_MARGIN = 3;
/// <summary>
/// set this true to show circular buttons for code folding (the [+] and [-] buttons on the margin)
/// </summary>
private const bool CODEFOLDING_CIRCULAR = true;
private void InitNumberMargin()
{
rtbResult.Styles[Style.LineNumber].BackColor = IntToColor(BACK_COLOR);
rtbResult.Styles[Style.LineNumber].ForeColor = IntToColor(FORE_COLOR);
rtbResult.Styles[Style.IndentGuide].ForeColor = IntToColor(FORE_COLOR);
rtbResult.Styles[Style.IndentGuide].BackColor = IntToColor(BACK_COLOR);
var nums = rtbResult.Margins[NUMBER_MARGIN];
nums.Width = 30;
nums.Type = MarginType.Number;
nums.Sensitive = true;
nums.Mask = 0;
rtbResult.MarginClick += rtbResult_MarginClick;
}
private void InitBookmarkMargin()
{
//rtbResult.SetFoldMarginColor(true, IntToColor(BACK_COLOR));
var margin = rtbResult.Margins[BOOKMARK_MARGIN];
margin.Width = 20;
margin.Sensitive = true;
margin.Type = MarginType.Symbol;
margin.Mask = (1 << BOOKMARK_MARKER);
//margin.Cursor = MarginCursor.Arrow;
var marker = rtbResult.Markers[BOOKMARK_MARKER];
marker.Symbol = MarkerSymbol.Circle;
marker.SetBackColor(IntToColor(0xFF003B));
marker.SetForeColor(IntToColor(0x000000));
marker.SetAlpha(100);
}
private void InitCodeFolding()
{
rtbResult.SetFoldMarginColor(true, IntToColor(BACK_COLOR));
rtbResult.SetFoldMarginHighlightColor(true, IntToColor(BACK_COLOR));
// Enable code folding
rtbResult.SetProperty("fold", "1");
rtbResult.SetProperty("fold.compact", "1");
// Configure a margin to display folding symbols
rtbResult.Margins[FOLDING_MARGIN].Type = MarginType.Symbol;
rtbResult.Margins[FOLDING_MARGIN].Mask = Marker.MaskFolders;
rtbResult.Margins[FOLDING_MARGIN].Sensitive = true;
rtbResult.Margins[FOLDING_MARGIN].Width = 20;
// Set colors for all folding markers
for (int i = 25; i <= 31; i++)
{
rtbResult.Markers[i].SetForeColor(IntToColor(BACK_COLOR)); // styles for [+] and [-]
rtbResult.Markers[i].SetBackColor(IntToColor(FORE_COLOR)); // styles for [+] and [-]
}
// Configure folding markers with respective symbols
rtbResult.Markers[Marker.Folder].Symbol = CODEFOLDING_CIRCULAR ? MarkerSymbol.CirclePlus : MarkerSymbol.BoxPlus;
rtbResult.Markers[Marker.FolderOpen].Symbol = CODEFOLDING_CIRCULAR ? MarkerSymbol.CircleMinus : MarkerSymbol.BoxMinus;
rtbResult.Markers[Marker.FolderEnd].Symbol = CODEFOLDING_CIRCULAR ? MarkerSymbol.CirclePlusConnected : MarkerSymbol.BoxPlusConnected;
rtbResult.Markers[Marker.FolderMidTail].Symbol = MarkerSymbol.TCorner;
rtbResult.Markers[Marker.FolderOpenMid].Symbol = CODEFOLDING_CIRCULAR ? MarkerSymbol.CircleMinusConnected : MarkerSymbol.BoxMinusConnected;
rtbResult.Markers[Marker.FolderSub].Symbol = MarkerSymbol.VLine;
rtbResult.Markers[Marker.FolderTail].Symbol = MarkerSymbol.LCorner;
// Enable automatic folding
rtbResult.AutomaticFold = (AutomaticFold.Show | AutomaticFold.Click | AutomaticFold.Change);
}
private void rtbResult_MarginClick(object sender, MarginClickEventArgs e)
{
if (e.Margin == BOOKMARK_MARGIN)
{
// Do we have a marker for this line?
const uint mask = (1 << BOOKMARK_MARKER);
var line = rtbResult.Lines[rtbResult.LineFromPosition(e.Position)];
if ((line.MarkerGet() & mask) > 0)
{
// Remove existing bookmark
line.MarkerDelete(BOOKMARK_MARKER);
}
else
{
// Add bookmark
line.MarkerAdd(BOOKMARK_MARKER);
}
}
}
private void InitColors()
{
rtbResult.SetSelectionBackColor(true, IntToColor(0x114D9C));
}
private void InitSyntaxColoring()
{
// Configure the default style
rtbResult.StyleResetDefault();
rtbResult.Styles[Style.Default].Font = "Consolas";
rtbResult.Styles[Style.Default].Size = 10;
rtbResult.Styles[Style.Default].BackColor = IntToColor(0x212121);
rtbResult.Styles[Style.Default].ForeColor = IntToColor(0xFFFFFF);
rtbResult.StyleClearAll();
// Configure the CPP (C#) lexer styles
rtbResult.Styles[Style.Cpp.Identifier].ForeColor = IntToColor(0xD0DAE2);
rtbResult.Styles[Style.Cpp.Comment].ForeColor = IntToColor(0xBD758B);
rtbResult.Styles[Style.Cpp.CommentLine].ForeColor = IntToColor(0x40BF57);
rtbResult.Styles[Style.Cpp.CommentDoc].ForeColor = IntToColor(0x2FAE35);
rtbResult.Styles[Style.Cpp.Number].ForeColor = IntToColor(0xFFFF00);
rtbResult.Styles[Style.Cpp.String].ForeColor = IntToColor(0xFFFF00);
rtbResult.Styles[Style.Cpp.Character].ForeColor = IntToColor(0xE95454);
rtbResult.Styles[Style.Cpp.Preprocessor].ForeColor = IntToColor(0x8AAFEE);
rtbResult.Styles[Style.Cpp.Operator].ForeColor = IntToColor(0xE0E0E0);
rtbResult.Styles[Style.Cpp.Regex].ForeColor = IntToColor(0xff00ff);
rtbResult.Styles[Style.Cpp.CommentLineDoc].ForeColor = IntToColor(0x77A7DB);
rtbResult.Styles[Style.Cpp.Word].ForeColor = IntToColor(0x48A8EE);
rtbResult.Styles[Style.Cpp.Word2].ForeColor = IntToColor(0xF98906);
rtbResult.Styles[Style.Cpp.CommentDocKeyword].ForeColor = IntToColor(0xB3D991);
rtbResult.Styles[Style.Cpp.CommentDocKeywordError].ForeColor = IntToColor(0xFF0000);
rtbResult.Styles[Style.Cpp.GlobalClass].ForeColor = IntToColor(0x48A8EE);
rtbResult.Lexer = Lexer.Cpp;
rtbResult.SetKeywords(0, "class extends implements import interface new case do while else if for in switch throw get set function var try catch finally while with default break continue delete return each const namespace package include use is as instanceof typeof author copy default deprecated eventType example exampleText exception haxe inheritDoc internal link mtasc mxmlc param private return see serial serialData serialField since throws usage version langversion playerversion productversion dynamic private public partial static intrinsic internal native override protected AS3 final super this arguments null Infinity NaN undefined true false abstract as base bool break by byte case catch char checked class const continue decimal default delegate do double descending explicit event extern else enum false finally fixed float for foreach from goto group if implicit in int interface internal into is lock long new null namespace object operator out override orderby params private protected public readonly ref return switch struct sbyte sealed short sizeof stackalloc static string select this throw true try typeof uint ulong unchecked unsafe ushort using var virtual volatile void while where yield");
rtbResult.SetKeywords(1, "void Null ArgumentError arguments Array Boolean Class Date DefinitionError Error EvalError Function int Math Namespace Number Object RangeError ReferenceError RegExp SecurityError String SyntaxError TypeError uint XML XMLList Boolean Byte Char DateTime Decimal Double Int16 Int32 Int64 IntPtr SByte Single UInt16 UInt32 UInt64 UIntPtr Void Path File System Windows Forms ScintillaNET");
}
#endregion
private void Form1_Load(object sender, EventArgs e)
{
rtbResult.WrapMode = WrapMode.None;
rtbResult.IndentationGuides = IndentView.LookBoth;
// STYLING
InitColors();
InitSyntaxColoring();
// NUMBER MARGIN
InitNumberMargin();
// BOOKMARK MARGIN
InitBookmarkMargin();
// CODE FOLDING MARGIN
InitCodeFolding();
}
private void btnGen_Click(object sender, EventArgs e)
{
string resultClass = "";
resultClass += $"namespace { txtNameSpace.Text }" + Environment.NewLine;
resultClass += "{" + Environment.NewLine;
resultClass += $" public class { txtClassName.Text }" + Environment.NewLine;
resultClass += " {" + Environment.NewLine;
foreach (Table table in srv.Databases[databaseName].Tables)
{
if (table.Name.Equals(cb_TableDatabase.Text))
{
foreach (Column col in table.Columns)
{
resultClass += $" public {GetNetDataType(col.DataType.Name)} {col.Name} {{ get; set; }}" + Environment.NewLine;
}
break;
}
}
resultClass += " }" + Environment.NewLine;
resultClass += "}";
rtbResult.Text = resultClass;
}
private void cb_TableDatabase_SelectedIndexChanged(object sender, EventArgs e)
{
txtClassName.Text = cb_TableDatabase.Text;
}
private void button1_Click(object sender, EventArgs e)
{
Clipboard.SetText(rtbResult.Text);
}
private void rtbResult_TextChanged(object sender, EventArgs e)
{
}
private void btnConnect_Click(object sender, EventArgs e)
{
databaseName = txt_nameDatabase.Text;
var svrConnection = new ServerConnection();
svrConnection.ConnectionString = $@"Server={txt_ip.Text};Database={databaseName};User Id={txtUsername.Text};Password = {txtPassword.Text};";
svrConnection.Connect();
srv = new Server(svrConnection);
var listTables = new List<string>();
foreach (Table table in srv.Databases[databaseName].Tables)
{
listTables.Add(table.Name);
}
cb_TableDatabase.DataSource = listTables;
cb_TableDatabase.SelectedIndex = 0;
}
}
}
Thanks for watching!