|
|
|
C# ตรวจสอบค่าซ้ำกันใน DataGridView หรือใน Database sql |
|
|
|
|
|
|
|
จากรูป เมื่อเพิ่มหรือแก้ไขข้อมูลที่เป็นหมายเลขบัตรประชาชน เมื่อกด"บันทึก"อยากให้มันไปตรวจสอบในฐานข้อมูลนะครับ ว่ามันมีข้อมูลอยู่แล้วหรือไม่ ถ้าไม่ก็บันทึกลงได้ หรือถ้ามีแล้วก็ให้ขึ้น MessageBoxมาเตือนว่ามีข้อมูลแแล้ว :: หรือเพื่อลดความซับซ้อนของโค้ด ก็ตรวจสอบแค่ใน DataGridView ก็ได้ครับ
ขอบคุณครับ
Code (C#) ปุ่มบันทึก
private void btSave_Click(object sender, EventArgs e)
{
if (Program.checkMaskedBox(mkIDCard)) [color=green]//สร้างใน Program.cs
{
MessageBox.Show("กรุณากรอกข้อมูลหมายเลขบัตรประชาชนให้ถูกต้องด้วย!", "คำเตือน", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
if (Program.checkTextBox(txtFName) || Program.checkTextBox(txtLName) || Program.checkTextBox(txtUserName) || Program.checkTextBox(txtPassword) || Program.checkTextBox(txtAddress)) [color=green] //สร้างใน Program.cs
{
MessageBox.Show("กรุณากรอกข้อมูลชื่อจริง,นามสกุล,UserName,Password,ที่อยู่ ให้ถูกต้องด้วย!", "คำเตือน", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
Program.clickButton("SAVE", btAdd, btSave, btEdit, btDelete, btCancel);
if (Program.checkDuplicate("SELECT IDCard FROM TBEmployee WHERE IDCard='" + IDCard + "'"))
{
string sql = "UPDATE TBEmployee SET " +
"IDCard='" + mkIDCard.Text.Trim() + "'," +
"FName='" + txtFName.Text.Trim() + "'," +
"LName='" + txtLName.Text.Trim() + "'," +
"Gender='" + cbGender.Text.Trim() + "'," +
"Phone='" + mkPhone.Text.Trim() + "'," +
"Address='" + txtAddress.Text.Trim() + "'," +
"EMail='" + txtEmail.Text.Trim() + "'," +
"UserName='" + txtUserName.Text.Trim() + "'," +
"Password='" + txtPassword.Text.Trim() + "' " +
"WHERE IDCard='" + IDCard + "'";
using (SqlCommand cm = new SqlCommand(sql, Program.cn))
{
if (Program.connection())
{
try
{
cm.ExecuteNonQuery();
}
catch (Exception ex)
{
MessageBox.Show("เกิดข้อผิดพลาดในส่วนของการแก้ไขข้อมูล เนื่องจาก " + ex.Message, "เกิดปัญหา", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
}
}
MessageBox.Show("การแก้ไขข้อมูลเรียบร้อยแล้ว", "สำเร็จ", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
string sql = "INSERT INTO TBEmployee(IDCard,FName,LName,Gender,Phone,Address,EMail,UserName,Password) " +
"VALUES('" + mkIDCard.Text.Trim() + "','" + txtFName.Text.Trim() +
"','" + txtLName.Text.Trim() + "','" + cbGender.Text.Trim() +
"','" + mkPhone.Text.Trim() + "','" + txtAddress.Text.Trim() +
"','" + txtEmail.Text.Trim() + "','" + txtUserName.Text.Trim() +
"','" + txtPassword.Text.Trim() + "')";
using (SqlCommand cm = new SqlCommand(sql, Program.cn))
{
if (Program.connection())
{
try
{
cm.ExecuteNonQuery();
}
catch (Exception ex)
{
MessageBox.Show("เกิดข้อผิดพลาดในส่วนของการบันทึกข้อมูล เนื่องจาก " + ex.Message, "เกิดปัญหา", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
}
}
MessageBox.Show("การบันทึกข้อมูลเรียบร้อยแล้ว", "สำเร็จ", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
if (checkAdmin())
{
showGridEmployee("SELECT * FROM TBEmployee ORDER BY IDCard");
}
else
{
showGridEmployee("SELECT * FROM TBEmployee WHERE IDCard='" + Program.emp_id + "'");
}
clear();
gbEmployee.Enabled = false;
}
Code (C#) Program.cs
public static bool checkMaskedBox(MaskedTextBox objectMK)
{
if (objectMK.Text.Replace("_", "") == "" || objectMK.Text.Replace("_", "").Length < 13)
{
return true;
}
else
{
return false;
}
}
public static bool checkTextBox(TextBox objectTXT)
{
if (objectTXT.Text == "")
{
return true;
}
else
{
return false;
Tag : Ms SQL Server 2005, C#, C, Windows
|
|
|
|
|
|
Date :
2013-12-02 07:03:38 |
By :
nayninew |
View :
8460 |
Reply :
6 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ติดปัญหาตรงไหนครับ แค่เอาค่าไปเช็คใน Database ก่อนครับ
|
|
|
|
|
Date :
2013-12-02 10:03:34 |
By :
mr.win |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ถ้าโดยปกติทั่วไปแล้วในเมธอด checkDuplicate ควรจะมีการทำงานดังนี้
1. Select โดย Where ฟิลที่ต้องการตรวจเช็คไปว่ามีใน Table หรือไม่ (ในกรณีใช้ RowFlag ก็ And เพิ่มด้วยเอาเฉพาะที่ยังไม่ลบ)
2. หลังจาก Select เราก็จะเช็คจากจำนวนแถวที่ค้นหาเจอ ที่ได้คืนมา และถือว่า Duplicate = true เข้าการแจ้งเตือนต่อไป
แต่ถ้าอยากใช้วิธีง่ายๆ ไม่ไปยุ่งกับใน Database เช็คจากหน้าจออย่างเดียว เป็นเครื่อง Stand-alone
ก็ใช้วิธีการ Linq เช็คก็ได้ ดังนี้
1. ในเมธอด checkDuplicate ให้รับ Dataset ที่เชื่อม (Bind) อยู่กับ Datasource ของ Datagrid เข้ามาในเมธอดก่อน
2. ใช้ Linq ในเมธอด checkDuplicate ดังนี้
Code (C#)
Boolean ChkDup = false;
var DSTamp = DATASET.TBEmployee.GroupBy(it => it.IDCard).Where(g => g.Count() >= 2).FirstOrDefault().ToList();
if (DSTamp.Count > 0)
{
ChkDup = true;
return;
}
ลองประยุกต์ดูครับ
|
|
|
|
|
Date :
2013-12-02 11:20:40 |
By :
01000010 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Code (VB.NET)
Dim intNumRows As Integer
strSQL = "SELECT COUNT(*) FROM customer WHERE CustomerID = '"& Me.txtCustomerID.Text &"' "
objCmd = New SqlCommand(strSQL, objConn)
intNumRows = objCmd.ExecuteScalar()
IF intNumRows > 0 Then
Me.pnlAdd.Visible = False
Me.lblStatus.Visible = True
Me.lblStatus.Text = "CustomerID already exist."
Else
strSQL = "INSERT INTO customer (CustomerID,Name,Email,CountryCode,Budget,Used) " & _
" VALUES " & _
" ('" & Me.txtCustomerID.Text & "','" & Me.txtName.Text & "','" & Me.txtEmail.Text & "', " & _
" '" & Me.txtCountryCode.Text & "','" & Me.txtBudget.Text & "','" & Me.txtUsed.Text & "')"
objCmd = New SqlCommand
With objCmd
.Connection = objConn
.CommandText = strSQL
.CommandType = CommandType.Text
End With
Me.pnlAdd.Visible = False
Try
objCmd.ExecuteNonQuery()
Me.lblStatus.Text = "Record Inserted"
Me.lblStatus.Visible = True
Catch ex As Exception
Me.lblStatus.Visible = True
Me.lblStatus.Text = "Record can not insert Error ("& ex.Message &")"
End Try
End IF
เอาไป Gen เป็น C# อีกทีนะครับ
CR.Tc admin
|
|
|
|
|
Date :
2013-12-02 13:07:59 |
By :
nongpaoza |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
โทษนะครับคือผมเพิ่ม ภาษาไทย แล้ว ขึ้นเครื่องหมาย ????? ทำไงดีครับ
|
|
|
|
|
Date :
2013-12-03 13:12:46 |
By :
อนันต์ บุญอำนวย |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ตรวจสอบค่าซ้ำกันใน DataGridViewทำยังไงครับ
|
|
|
|
|
Date :
2017-08-20 20:42:12 |
By :
van |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 05
|