|
.NET สร้าง Auto ID Number ใช้สำหรับ Order ID หรือ Member ID รหัสลำดับต่างๆ โดยมีอักษร (VB.Net, C#) |
.NET สร้าง Auto ID Number ใช้สำหรับ Order ID หรือ Member ID รหัสลำดับต่าง ๆ โดยมีอักษร และ ลำดับ (VB.Net, C#)เห็นถามกันมาบ่อยๆ ในกระทู้ เกี่ยวกับการสร้างลำดับพวก ID หรือ Sequence Number วันนี้ว่างๆ เลยจัดให้ซะหน่อย โดยในตัวอย่างบทความนี้จะเป็นการสร้าง Auto ID ลำดับของตัวเลข มีตัวอักษร และ ปี, เดือน มาเกี่ยวข้อง เหมาะสำหรับใช้เป็นพวก Order ID , Member ID หรือลำดับอื่น ๆ แล้วแต่จะประยุกต์การใช้งาน ในตัวอย่างนี้จะใช้ร่วมกับ Database ของ SQL Server โดยใช้วิธีการการสร้าง Table มาจัดเก็บลำดับ
Auto ID Number ใช้สำหรับ Order ID หรือ Member ID รหัสลำดับต่าง ๆ
ในตัวอย่างนี้จะประกอบด้วย 2 ตัวอย่างคือ
1. สร้าง ID แบบทีตัวอักษรและลำดับ เช่น TC-00001
2. สร้าง ID แบบที่มี ปี, เดือน และลำดับ เช่น TC-2016-12-00001
Ex1. สร้าง Auto ID แบบทีตัวอักษรและลำดับ เช่น TC-00001
ใน Concept ของตัวอย่างแรก ให้สร้าง Table ง่าย ๆ สำหรับจัดเก็บลำดับแบบง่าย ๆ โดยจัดเก็บเป็นตัวเลข ที่เป็น ID ล่าสุด เพื่อจะได้นำไป +1 เมื่อมีการดึงค่า ID ใหม่
Table : GenerateNumber
CREATE TABLE [dbo].[GenerateNumber](
[Sequence] [int] NOT NULL,
CONSTRAINT [PK_GenerateNumber] PRIMARY KEY CLUSTERED
(
[Sequence] ASC
)) ON [PRIMARY]
GO
INSERT INTO GenerateNumber (Sequence) VALUES ('1');
Code ตัวอย่างของ C# และ VB.Net
C#
protected void Page_Load(object sender, EventArgs e)
{
this.lblSeqNo.Text = GenerateNumber();
}
protected static string GenerateNumber()
{
var strSeqNo = string.Empty;
var strPrefix = "TC"; // Prefix : TC-
var intLength = 5; // Length : TC-XXXXX
var intSequence = 0;
var objConn = new SqlConnection();
var objCmd = new SqlCommand();
var strSQL = string.Empty;
var strConnString = "Server=localhost;UID=sa;PASSWORD=mypassword;database=mydatabase; " +
" Max Pool Size=400;Connect Timeout=600;";
objConn.ConnectionString = strConnString;
objConn.Open();
//*** Get current sequence
strSQL = "SELECT Sequence FROM GenerateNumber";
objCmd = new SqlCommand(strSQL, objConn);
SqlDataReader dr = objCmd.ExecuteReader();
if(dr.HasRows)
{
dr.Read();
intSequence = Convert.ToInt32(dr["Sequence"]);
}
dr.Close();
//*** Update new sequence
strSQL = "UPDATE GenerateNumber SET Sequence = Sequence + 1 ";
objCmd = new SqlCommand(strSQL, objConn);
objCmd.ExecuteNonQuery();
//*** Display sequence
strSeqNo = string.Format("{0}-{1}", strPrefix, intSequence.ToString().PadLeft(intLength,'0'));
objConn.Close();
objConn = null;
return strSeqNo;
}
VB.Net
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Me.lblSeqNo.Text = GenerateNumber()
End Sub
Protected Shared Function GenerateNumber() As String
Dim strSeqNo = String.Empty
Dim strPrefix = "TC" ' Prefix : TC-
Dim intLength = 5 ' Length : TC-XXXXX
Dim intSequence = 0
Dim objConn = New SqlConnection()
Dim objCmd = New SqlCommand()
Dim strSQL = String.Empty
Dim strConnString = "Server=localhost;UID=sa;PASSWORD=mypassword;database=mydatabase; " &
" Max Pool Size=400;Connect Timeout=600;"
objConn.ConnectionString = strConnString
objConn.Open()
'*** Get current sequence
strSQL = "SELECT Sequence FROM GenerateNumber"
objCmd = New SqlCommand(strSQL, objConn)
Dim dr As SqlDataReader = objCmd.ExecuteReader()
If dr.HasRows Then
dr.Read()
intSequence = Convert.ToInt32(dr("Sequence"))
End If
dr.Close()
'*** Update new sequence
strSQL = "UPDATE GenerateNumber SET Sequence = Sequence + 1 "
objCmd = New SqlCommand(strSQL, objConn)
objCmd.ExecuteNonQuery()
'*** Return sequence
strSeqNo = String.Format("{0}-{1}", strPrefix, intSequence.ToString().PadLeft(intLength, "0"))
objConn.Close()
objConn = Nothing
Return strSeqNo
End Function
Result
ID ที่ได้
เมื่อเรียกซ้ำๆ ลำดับของ ID จะเพิ่มขึ้นเรื่อยๆ
Ex2. สร้าง Auto ID แบบทีตัวอักษร ปี, เดือน และลำดับ เช่น TC-2016-12-00001
ใน Concept ของตัวอย่างที่ 2 ให้สร้าง Table ง่าย ๆ สำหรับจัดเก็บลำดับแบบง่าย ๆ โดย Table ให้มีการแยกจัดเก็บ ปี และ เดือน และ ลำดับ โดยรายการ เดือนและปี รวมทั้งลำดับ จะมีการ Insert ลงอัตโนมัติ เมื่อขึ้น ปี หรือ เดือน ใหม่
Table : GenerateNumber
CREATE TABLE [dbo].[GenerateNumber](
[Year] [int] NOT NULL,
[Month] [int] NOT NULL,
[Sequence] [int] NOT NULL,
CONSTRAINT [PK_GenerateNumber] PRIMARY KEY CLUSTERED
(
[Year] ASC,
[Month] ASC,
[Sequence] ASC
)) ON [PRIMARY]
Code ตัวอย่างของ C# และ VB.Net
C#
protected void Page_Load(object sender, EventArgs e)
{
this.lblSeqNo.Text = GenerateNumber();
}
protected static string GenerateNumber()
{
var strSeqNo = string.Empty;
var strPrefix = "TC"; // Prefix : TC-
var intLength = 5; // Length : TC-XXXXX
var intYear = DateTime.Now.Year;
var intMonth = DateTime.Now.Month;
var intSequence = 0;
var objConn = new SqlConnection();
var objCmd = new SqlCommand();
var strSQL = string.Empty;
var strConnString = "Server=localhost;UID=sa;PASSWORD=mypassword;database=mydatabase; " +
" Max Pool Size=400;Connect Timeout=600;";
objConn.ConnectionString = strConnString;
objConn.Open();
//*** Get current sequence
strSQL = "SELECT Sequence FROM GenerateNumber WHERE Year = " + intYear + " AND Month = " + intMonth + " ";
objCmd = new SqlCommand(strSQL, objConn);
SqlDataReader dr = objCmd.ExecuteReader();
if (dr.HasRows)
{
dr.Read();
intSequence = Convert.ToInt32(dr["Sequence"]);
}
dr.Close();
//*** Insert new month (when new month)
if (intSequence == 0)
{
intSequence = 1;
strSQL = "INSERT INTO GenerateNumber (Year, Month, Sequence) VALUES (" + intYear + "," + intMonth + "," + intSequence + "); ";
objCmd = new SqlCommand(strSQL, objConn);
objCmd.ExecuteNonQuery();
}
//*** Update new sequence
strSQL = "UPDATE GenerateNumber SET Sequence = Sequence + 1 WHERE Year = " + intYear + " AND Month = " + intMonth + " ";
objCmd = new SqlCommand(strSQL, objConn);
objCmd.ExecuteNonQuery();
//*** Display sequence
strSeqNo = string.Format("{0}-{1}-{2}-{3}", strPrefix, intYear,
intMonth.ToString().PadLeft(2,'0'), intSequence.ToString().PadLeft(intLength, '0'));
objConn.Close();
objConn = null;
return strSeqNo;
}
VB.Net
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Me.lblSeqNo.Text = GenerateNumber()
End Sub
Protected Shared Function GenerateNumber() As String
Dim strSeqNo = String.Empty
Dim strPrefix = "TC" ' Prefix : TC-
Dim intLength = 5 ' Length : TC-XXXXX
Dim intYear = DateTime.Now.Year
Dim intMonth = DateTime.Now.Month
Dim intSequence = 0
Dim objConn = New SqlConnection()
Dim objCmd = New SqlCommand()
Dim strSQL = String.Empty
Dim strConnString = "Server=localhost;UID=sa;PASSWORD=mypassword;database=mydatabase; " &
" Max Pool Size=400;Connect Timeout=600;"
objConn.ConnectionString = strConnString
objConn.Open()
'*** Get current sequence
strSQL = "SELECT Sequence FROM GenerateNumber WHERE Year = " & intYear & " AND Month = " & intMonth & " "
objCmd = New SqlCommand(strSQL, objConn)
Dim dr As SqlDataReader = objCmd.ExecuteReader()
If dr.HasRows Then
dr.Read()
intSequence = Convert.ToInt32(dr("Sequence"))
End If
dr.Close()
'*** Insert new month (when new month)
If intSequence = 0 Then
intSequence = 1
strSQL = "INSERT INTO GenerateNumber (Year, Month, Sequence) VALUES (" & intYear & "," & intMonth & "," & intSequence & "); "
objCmd = New SqlCommand(strSQL, objConn)
objCmd.ExecuteNonQuery()
End If
'*** Update new sequence
strSQL = "UPDATE GenerateNumber SET Sequence = Sequence + 1 WHERE Year = " & intYear & " AND Month = " & intMonth & " "
objCmd = New SqlCommand(strSQL, objConn)
objCmd.ExecuteNonQuery()
'*** Display sequence
strSeqNo = String.Format("{0}-{1}-{2}-{3}", strPrefix, intYear,
intMonth.ToString().PadLeft(2, "0"), intSequence.ToString().PadLeft(intLength, "0"))
objConn.Close()
objConn = Nothing
Return strSeqNo
End Function
Result
ID ที่มี ปี และ เดือน มาเกี่ยวข้อง
ID ที่มี ปี และ เดือน มาเกี่ยวข้อง
ในกรณีที่ขึ้น เดือน หรือ ปี ใหม่ ก็จะเริ่มนับ 1 ใหม่
รายการ Table ที่เกี่ยวข้อง ที่ถูก Insert อัตโนมัติ
Note!! ในกรณีที่ต้องการเชื่อมต่อกับ Database อื่นๆ เช่น MySQL, MS Access หรือ Oracle ให้เปลี่ยนรูปแบบของ Connector และ ConnectionString ตามตัวอย่างนี้
Ms Access (OleDb)
MySQL (MySqlClient)
Ms Access (OracleClient)
Ms Access (Odbc)
|
|
|
|
|
|
|
|
By : |
TC Admin
|
|
Article : |
บทความเป็นการเขียนโดยสมาชิก หากมีปัญหาเรื่องลิขสิทธิ์ กรุณาแจ้งให้ทาง webmaster ทราบด้วยครับ |
|
Score Rating : |
|
|
Create Date : |
2016-12-28 |
|
Download : |
No files |
|
Sponsored Links |
|
|
|
|
|
|