 |
|
ต้องการบันทึกข้อมูลที่แสดงเป็น Name แต่บันทึกเป็น ID ยังไงคะ |
|
 |
|
|
 |
 |
|
ต้องการบันทึกข้อมูลที่ดึงมาจากตาราง ข้อมูลลูกค้า แสดงใน datagrid เป็น ชื่อ คือ ฟิลด์ Name
แต่อยากจะให้บันทึกเป็นรหัสอ่าค่ะ ฟิลด์ ID ต้องเขียนโค้ดยังไงคะ
เท่าที่อ่านๆมา บอกว่าต้อง select หรอค่ะ แล้วจะ select ยังไงดี ลองมาหลายแบบแล้ว ก็ยังบันทึกเป็นชื่ออยู่ดี
ด้านล่างนี้โค้ดบันทึกที่ใช้อยู่ค่ะ
Code (VB.NET)
If CBool(MessageBox.Show("บันทึกใช่หรือไม่ !!!", "ผลการทำงาน", MessageBoxButtons.YesNo, MessageBoxIcon.Information) = DialogResult.Yes) Then
Conn = New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\\Database passport\Passport.accdb;")
Conn.Open()
Try
For i As Integer = 0 To dgvPassenger2.Rows.Count - 1
Dim sql As String
sql = "SELECT Passenger_ID FROM Passenger"
sql &= "WHERE F_Name='" & dgvPassenger2.Rows(i).Cells(3).Value.ToString & "', L_Name='" & dgvPassenger2.Rows(i).Cells(2).Value.ToString & "'"
'" & dgvPassenger2.Rows(i).Cells(3).Value.ToString & "')"
sql = "INSERT INTO [VisaSaleCard] ([SaleCard_No],[Customer],[Agent],[Embassy],[DateofIssue],[Note],[ServiceFee],[Totalcost],[Sale],[working_day],[Entries],[Valid_date],[[color=pink]Passenger_ID]) VALUES (@SaleCard_No,@Customer,@Agent,@Embassy,@DateofIssue,@Note,@ServiceFee,@Totalcost,@Sale,@working_day,@Entries,@Valid_date,@Passenger_ID)"
Dim cm As New OleDbCommand(sql, Conn)
cm.Parameters.AddWithValue("@SaleCard_No", tbxNo.Text)
cm.Parameters.AddWithValue("@Customer", cbCustomer.Text)
cm.Parameters.AddWithValue("@Agent", cbAgent.Text)
cm.Parameters.AddWithValue("@Embassy", cbEmbassy.Text)
cm.Parameters.AddWithValue("@DateofIssue", dtDate.Text)
cm.Parameters.AddWithValue("@Note", tbxNote.Text)
cm.Parameters.AddWithValue("@ServiceFee", tbxServiceFee.Text)
cm.Parameters.AddWithValue("@Totalcost", tbxTotalCost.Text)
cm.Parameters.AddWithValue("@Sale", tbxSale.Text)
cm.Parameters.AddWithValue("@working_day", cbWorkDays1.Text)
cm.Parameters.AddWithValue("@Entries", cbEntries1.Text)
cm.Parameters.AddWithValue("@Valid_date", dtDuration1.Text)
cm.Parameters.AddWithValue("@Passenger_ID", dgvPassenger2.Rows(i).Cells(3).Value.ToString)
cm.Transaction = tr
With cm
.CommandText = sql
'.ExecuteNonQuery()
End With
cm.ExecuteNonQuery()
Conn.Close()
Exit For
Next
Catch ex As Exception
success = False
errorMessage = ex.Message
End Try
MessageBox.Show("บันทึกข้อมูลเรียบร้อยแล้ว")
End If
ฟิลด์ที่ต้องการบันทึกให้เป็น ID คือ Passenger_ID ค่ะ
Tag : .NET
|
ประวัติการแก้ไข 2011-01-17 10:54:28
|
 |
 |
 |
 |
Date :
2011-01-17 10:51:14 |
By :
zeenanz |
View :
1209 |
Reply :
12 |
|
 |
 |
 |
 |
|
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ก็มาถูกทางแล้วนิครับ จขกท ก็สร้าง OleDbCommand มาดึงค่าโดยใช้ SQL String บรรทัดที่ 9-10 แล้วก็สร้าง OledbReader มารับค่าจาก OleDbCommand โดยตอน Execute เปลี่ยนจาก NonQuery เป็น Reader แล้วดึงค่า จาก OledbReader เอาครับ
|
 |
 |
 |
 |
Date :
2011-01-17 11:25:50 |
By :
kaimuk |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ยังไงอ่ะค่ะ นึกภาพไม่ออก
คือยังไม่เก่งอ่าค่ะ
|
 |
 |
 |
 |
Date :
2011-01-17 13:16:08 |
By :
zeenanz |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
แบบนี้รึป่าวคะ ใส่หลังบรรทัดที่ 10 หรือป่าว
Code (VB.NET)
Dim cmm As New OleDbCommand(sql, Conn)
With cmm
.CommandText = sql
.ExecuteReader()
End With
|
 |
 |
 |
 |
Date :
2011-01-17 13:19:03 |
By :
zeenanz |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
Code (VB.NET)
If CBool(MessageBox.Show("บันทึกใช่หรือไม่ !!!", "ผลการทำงาน", MessageBoxButtons.YesNo, MessageBoxIcon.Information) = DialogResult.Yes) Then
Conn = New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\\Database passport\Passport.accdb;")
Conn.Open()
Try
Dim sql As String
Dim cmd As OleDbCommand
Dim _Read As OleDbReader
Dim _ID as String
For i As Integer = 0 To dgvPassenger2.Rows.Count - 1
sql = "SELECT Passenger_ID FROM Passenger"
sql &= "WHERE F_Name='" & dgvPassenger2.Rows(i).Cells(3).Value.ToString & "', L_Name='" & dgvPassenger2.Rows(i).Cells(2).Value.ToString & "'"
cm = new OleDbCommand(sql,Conn)
cm.Transaction = tr
_Read = cmd.ExecuteReader
Do While _Read.Read()
_ID = _Read(“Passenger_ID”)
Loop
_Read.Close
sql = "INSERT INTO [VisaSaleCard] ([SaleCard_No],[Customer],[Agent],[Embassy],[DateofIssue],[Note],[ServiceFee],[Totalcost],[Sale],[working_day],[Entries],[Valid_date],[[color=pink]Passenger_ID]) VALUES (@SaleCard_No,@Customer,@Agent,@Embassy,@DateofIssue,@Note,@ServiceFee,@Totalcost,@Sale,@working_day,@Entries,@Valid_date,@Passenger_ID)"
cm.Parameters.AddWithValue("@SaleCard_No", tbxNo.Text)
cm.Parameters.AddWithValue("@Customer", cbCustomer.Text)
cm.Parameters.AddWithValue("@Agent", cbAgent.Text)
cm.Parameters.AddWithValue("@Embassy", cbEmbassy.Text)
cm.Parameters.AddWithValue("@DateofIssue", dtDate.Text)
cm.Parameters.AddWithValue("@Note", tbxNote.Text)
cm.Parameters.AddWithValue("@ServiceFee", tbxServiceFee.Text)
cm.Parameters.AddWithValue("@Totalcost", tbxTotalCost.Text)
cm.Parameters.AddWithValue("@Sale", tbxSale.Text)
cm.Parameters.AddWithValue("@working_day", cbWorkDays1.Text)
cm.Parameters.AddWithValue("@Entries", cbEntries1.Text)
cm.Parameters.AddWithValue("@Valid_date", dtDuration1.Text)
cm.Parameters.AddWithValue("@Passenger_ID", _ID)
cm.Transaction = tr
With cm
.CommandText = sql
'.ExecuteNonQuery()
End With
cm.ExecuteNonQuery()
Conn.Close()
Exit For
Next
Catch ex As Exception
success = False
errorMessage = ex.Message
End Try
MessageBox.Show("บันทึกข้อมูลเรียบร้อยแล้ว")
End If
|
 |
 |
 |
 |
Date :
2011-01-17 13:41:15 |
By :
kaimuk |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
บันทึกไม่ลงฐานข้อมูลเลยค่ะ
|
 |
 |
 |
 |
Date :
2011-01-17 13:51:35 |
By :
zeenanz |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
Y_Y ใครก็ได้ช่วยหน่อยนะคะ
นั่งทำมาหลายวันแล้วยังทำไม่ได้เลย
|
 |
 |
 |
 |
Date :
2011-01-17 14:35:15 |
By :
zeenanz |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
dgvPassenger2.Rows(i).Cells(3).Value.ToString
ลองใส่วงเล็บเปิดปิดหลัง ToString เป็น ToString()
|
 |
 |
 |
 |
Date :
2011-01-17 14:58:23 |
By :
misteryou |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ก็ยังไม่ได้เลยค่ะ ไม่ error แต่บันทึกไม่ได้
|
 |
 |
 |
 |
Date :
2011-01-17 15:34:00 |
By :
zeenanz |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
Transaction ไม่มีการ Comit อ่ะครับ
|
ประวัติการแก้ไข 2011-01-17 16:49:55
 |
 |
 |
 |
Date :
2011-01-17 16:49:40 |
By :
kaimuk |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
แล้วทำไงดีอ่าค่ะ ไม่เป็นซะด้วย
นั่งทำมาหลายวันแล้วอ่าค่ะ ช่วยหน่อยนะคะ
|
 |
 |
 |
 |
Date :
2011-01-18 09:04:33 |
By :
zeenanz |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
Tr.Commit() ใส่ไว้ก่อน Catch ex As Exception
|
 |
 |
 |
 |
Date :
2011-01-18 09:16:31 |
By :
kaimuk |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ให้ตรวจสอบสิ่งเหล่านี้
1. tr ของคุณคือ OleDbTransaction ใช่หรือไม่
2. หากไม่มีคำสั่งบรรทัดนี้
cm.Transaction = tr
สามารถบันทึกข้อมูลได้หรือไม่
3. สามารถศึกษาการใช้ OleDbTransaction ได้ที่นี่
http://msdn.microsoft.com/en-us/library/93ehy0z8(v=VS.85).aspx
ข้อสังเกต เมื่อไหร่ก็ตามที่ต้องการใช้งานเกี่ยวกับ Transaction
ต้องมีคำสั่งต่อไปนี้ อยู่ในโปรแกรม ขาดไปอันใดอันหนึ่ง โปรแกรมจะไม่สามารถทำงานได้ตามประสงค์อย่างแน่นอน
transaction = connection.BeginTransaction()
transaction.Commit()
transaction.Rollback()
4. อันนี้ไม่เกี่ยวกับ Transaction เกี่ยวกับการเปิด Connection (conn.Open) คำสั่งนี้ ควรเขียนภายใน Try Box เพื่อมิให้โปรแกรมเกิดข้อผิดพลาด โดยไม่มีตัวจับ ดังตัวอย่างข้างล่าง
ส่วนของการปิด ให้ไว้ใน Finally
Code (VB.NET)
Dim Conn = New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\\Database passport\Passport.accdb;")
Try
Conn.Open()
Catch ex As Exception
' แสดงข้อผิดพลาด
Finally
Conn.Close()
Conn.Dispose()
End Try
|
 |
 |
 |
 |
Date :
2011-01-18 09:50:03 |
By :
หางอึ่ง |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
|
|