 |
|
[.NET]
ต้องการบันทึกข้อมูลจาก DataGridView ลงฐานข้อมูล Database หลาย ๆ แถวพร้อมกัน ครับ |
|
 |
|
|
 |
 |
|
ต้องการบันทึกข้อมูลจาก Datagrid ลงฐานข้อมูลหลายๆแถวพร้อมกัน ครับ
code Vb.net
Code (VB.NET)
01. Private Sub BtnSave_Click( ByVal sender As System. Object , ByVal e As System.EventArgs) Handles BtnSave.Click
02.
03. strsql = "insert into OrderDetail(OrderID,ProductID,NumberOrder,UnitID,Weight,UnitWeightID,Driver,RegisDriver) values(@OrderId,@ProductID,@ProductName,@NumberOrder,@UnitID,@Weight,@UnitWeightID,@Driver,@RegisDriver)"
04. objCmd = New System.Data.SqlClient.SqlCommand(strsql, DbConn)
05. For i As Integer = 0 To DataGridOrder.RowCount - 1
06. If Not DataGridOrder.Rows(i).IsNewRow Then
07. With objCmd
08. .Parameters.Add( New SqlParameter( "@OrderId" , orderID.Text))
09. .Parameters.Add( New SqlParameter( "@ProductID" , DataGridOrder.Rows(i).Cells(0).Value))
10. .Parameters.Add( New SqlParameter( "@NumberOrder" , DataGridOrder.Rows(i).Cells(1).Value))
11. .Parameters.Add( New SqlParameter( "@UnitId" , DataGridOrder.Rows(i).Cells(2).Value))
12. .Parameters.Add( New SqlParameter( "@Weight" , DataGridOrder.Rows(i).Cells(3).Value))
13. .Parameters.Add( New SqlParameter( "@UnitWeightID" , DataGridOrder.Rows(i).Cells(4).Value))
14. .Parameters.Add( New SqlParameter( "@Driver" , Driver.Text))
15. .Parameters.Add( New SqlParameter( "@RegisDriver" , RegisDriver.Text))
16. End With
17. End If
18. Next
19. objCmd.ExecuteNonQuery()
20. MessageBox.Show( "บันทึกข้อมูลแล้ว" )
21. DbConn.Close()
22. DataGridOrder.Rows.Clear()
23. End Sub
มันสามารถเพิ่มได้แค่ทีละแถว ถ้าเพิ่มข้อมูล 2 แถวมันจะ Error
Code
The variable name '@OrderId' has already been declared. Variable names must be unique within a query batch or stored procedure.
ฐานข้อมูล Sql Server 2008
table orderDetail
OrderID ---PK
ProductID ---PK
NumberOrder
UnitID
Weight
UnitWeight
Driver
RegisDriver
จะเขียนเพิ่มยังไงให้สามารถ บันทึกจาก DataGrid ได้หลายๆแถวครับ
Tag : .NET, Ms SQL Server 2008, Win (Windows App), VB.NET, VS 2010 (.NET 4.x)
|
|
 |
 |
 |
 |
Date :
2011-09-01 17:07:31 |
By :
sniper |
View :
17089 |
Reply :
13 |
|
 |
 |
 |
 |
|
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
เอา objCmd.ExecuteNonQuery() ไปไว้ข้างใน For ป่ะผมคิดว่าตรงนี้นะ เอาไว้ก่อน Next
|
ประวัติการแก้ไข 2011-09-01 18:08:50
 |
 |
 |
 |
Date :
2011-09-01 18:07:47 |
By :
Cyg |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
คือมันซ้ำน่ะครับ คุณส่ง Parameter ซ้ำครับ เพราะ Loop มันส่งซ้ำ ๆ หรือไม่ก็ให้ Clear หรือไม่ก็ New ใหม่ครับ
Code (VB.NET)
1. objCmd.Parameters.Clear()
Code (VB.NET)
01. Private Sub BtnSave_Click( ByVal sender As System. Object , ByVal e As System.EventArgs) Handles BtnSave.Click
02.
03. strsql = "insert into OrderDetail(OrderID,ProductID,NumberOrder,UnitID,Weight,UnitWeightID,Driver,RegisDriver) values(@OrderId,@ProductID,@ProductName,@NumberOrder,@UnitID,@Weight,@UnitWeightID,@Driver,@RegisDriver)"
04. objCmd = New System.Data.SqlClient.SqlCommand(strsql, DbConn)
05. For i As Integer = 0 To DataGridOrder.RowCount - 1
06. If Not DataGridOrder.Rows(i).IsNewRow Then
07. With objCmd
08. .Parameters.Add( New SqlParameter( "@OrderId" , orderID.Text))
09. .Parameters.Add( New SqlParameter( "@ProductID" , DataGridOrder.Rows(i).Cells(0).Value))
10. .Parameters.Add( New SqlParameter( "@NumberOrder" , DataGridOrder.Rows(i).Cells(1).Value))
11. .Parameters.Add( New SqlParameter( "@UnitId" , DataGridOrder.Rows(i).Cells(2).Value))
12. .Parameters.Add( New SqlParameter( "@Weight" , DataGridOrder.Rows(i).Cells(3).Value))
13. .Parameters.Add( New SqlParameter( "@UnitWeightID" , DataGridOrder.Rows(i).Cells(4).Value))
14. .Parameters.Add( New SqlParameter( "@Driver" , Driver.Text))
15. .Parameters.Add( New SqlParameter( "@RegisDriver" , RegisDriver.Text))
16. End With
17. objCmd.ExecuteNonQuery()
18. objCmd.Parameters.Clear()
19. End If
20. Next
21.
22. MessageBox.Show( "บันทึกข้อมูลแล้ว" )
23. DbConn.Close()
24. End Sub
หรือ
Code (VB.NET)
01. Private Sub BtnSave_Click( ByVal sender As System. Object , ByVal e As System.EventArgs) Handles BtnSave.Click
02.
03. strsql = "insert into OrderDetail(OrderID,ProductID,NumberOrder,UnitID,Weight,UnitWeightID,Driver,RegisDriver) values(@OrderId,@ProductID,@ProductName,@NumberOrder,@UnitID,@Weight,@UnitWeightID,@Driver,@RegisDriver)"
04.
05. For i As Integer = 0 To DataGridOrder.RowCount - 1
06. If Not DataGridOrder.Rows(i).IsNewRow Then
07. objCmd = New System.Data.SqlClient.SqlCommand(strsql, DbConn)
08. With objCmd
09. .Parameters.Add( New SqlParameter( "@OrderId" , orderID.Text))
10. .Parameters.Add( New SqlParameter( "@ProductID" , DataGridOrder.Rows(i).Cells(0).Value))
11. .Parameters.Add( New SqlParameter( "@NumberOrder" , DataGridOrder.Rows(i).Cells(1).Value))
12. .Parameters.Add( New SqlParameter( "@UnitId" , DataGridOrder.Rows(i).Cells(2).Value))
13. .Parameters.Add( New SqlParameter( "@Weight" , DataGridOrder.Rows(i).Cells(3).Value))
14. .Parameters.Add( New SqlParameter( "@UnitWeightID" , DataGridOrder.Rows(i).Cells(4).Value))
15. .Parameters.Add( New SqlParameter( "@Driver" , Driver.Text))
16. .Parameters.Add( New SqlParameter( "@RegisDriver" , RegisDriver.Text))
17. End With
18. objCmd.ExecuteNonQuery()
19. End If
20. Next
21.
22. MessageBox.Show( "บันทึกข้อมูลแล้ว" )
23. DbConn.Close()
24. DataGridOrder.Rows.Clear()
25. End Sub
|
 |
 |
 |
 |
Date :
2011-09-01 21:24:26 |
By :
webmaster |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
รบกวนถามนิดนึงนะคะว่า ก่อนที่จะเขียน code ด้านบนเนี่ย ต้องทำฐานข้อมูล แล้วก็สร้าง table ขึ้นมารองรับก่อนรึเปล่าคะ หรือว่าพอพิมคำสั่ง ด้านบนแล้ว มันจะสร้าง table ให้เลยคะ ??
|
 |
 |
 |
 |
Date :
2011-09-07 11:29:06 |
By :
nUnGnInG_ReScUe |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
คำสั่ง insert เป็นการเพิ่มข้อมูลลงฐานข้อมูล
ถ้าไม่มีฐานข้อมูลจะเพิ่มยังไงหว่า
|
 |
 |
 |
 |
Date :
2011-09-07 11:37:54 |
By :
m |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
แหะๆ ขอบคุณค่ะ ^^
|
 |
 |
 |
 |
Date :
2011-09-07 14:37:55 |
By :
nUnGnInG_ReScUe |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ขอบคุณมากครับ ผม อ่านแล้วเอามาประยุต ใช้ ได้ผล และได้ความรู้มากมายครับ ขอบคุณทุกท่าน
|
 |
 |
 |
 |
Date :
2012-11-29 10:45:56 |
By :
โปรแกรมเมอร์ มือสมัครเล่น |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
*****
รบกวนถามนิดนึงนะคะว่า ก่อนที่จะเขียน code ด้านบนเนี่ย ต้องทำฐานข้อมูล แล้วก็สร้าง table ขึ้นมารองรับก่อนรึเปล่าคะ หรือว่าพอพิมคำสั่ง ด้านบนแล้ว มันจะสร้าง table ให้เลยคะ ??
*****
โดยทั่วฯไป เราจะเห็น SourceCode ประกอบเพื่อให้เข้าใจ และใช้งานจริงฯ ไม่ได้ มันเป็นอย่างนี้จริงฯ 1, 2, 3, 4, 5, ..., Infinity
แต่คำถามนี้มันกลับกัน Infinity, ..., 5, 4, 3, 2, 1 มันทำได้ครับ และใช้งานได้จริงฯ และถูกต้องเสมอ
|
 |
 |
 |
 |
Date :
2012-11-29 11:33:48 |
By :
ผ่านมา |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
แหะๆ ขอบคุณค่ะ ^^
หนู ถาม/โดยเข้า/ไม่เข้าใจ มันเป็นสิ่งที่ถูกต้องแล้วครับ และผมก็ยึดแนวทางแบบนี้
จริงฯแล้วมันคือ Dynamic Table/Field
|
 |
 |
 |
 |
Date :
2012-11-29 11:41:18 |
By :
ผ่านมา |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ช่วยดูให้หน่อยได้ไหมค่ะ พอรันแล้วมันบอกว่า คุณละเมิดข้อจำกัด คีย์หลัก อยากรู้ว่ามันเปนเพราะอะไรค่ะ
Code (VB.NET)
01. If myCon.State = ConnectionState.Open Then
02. myCon.Close()
03. End If
04. myCon.ConnectionString = strConn
05. myCon.Open()
06. strSql = "Insert Into employees (emp_id,emp_name,emp_address,emp_phone,emp_gender,Status,Username,Password) values(@id,@emp_name,@emp_address,@emp_phone,@emp_gender,@Status,@Username,@Password)"
07. objCmd = New System.Data.SqlClient.SqlCommand(strSql, myCon)
08.
09. For i As Integer = 0 To dgvEmp.RowCount - 1
10. If Not dgvEmp.Rows(i).IsNewRow Then
11. objCmd = New System.Data.SqlClient.SqlCommand(strSql, myCon)
12.
13. With objCmd
14. .Parameters.Add( New SqlParameter( "@id" , txtId.Text))
15. .Parameters.Add( New SqlParameter( "@emp_name" , dgvEmp.Rows(i).Cells(0).Value))
16. .Parameters.Add( New SqlParameter( "@emp_address" , dgvEmp.Rows(i).Cells(1).Value))
17. .Parameters.Add( New SqlParameter( "@emp_phone" , dgvEmp.Rows(i).Cells(2).Value))
18. .Parameters.Add( New SqlParameter( "@emp_gender" , dgvEmp.Rows(i).Cells(3).Value))
19. .Parameters.Add( New SqlParameter( "@Status" , dgvEmp.Rows(i).Cells(4).Value))
20. .Parameters.Add( New SqlParameter( "@Username" , dgvEmp.Rows(i).Cells(5).Value))
21. .Parameters.Add( New SqlParameter( "@Password" , dgvEmp.Rows(i).Cells(6).Value))
22. End With
23. objCmd.ExecuteNonQuery()
24. End If
25. Next
26. MessageBox.Show( "บันทึกข้อมุลแล้ว" )
27. myCon.Close()
28. dgvEmp.Rows.Clear()
|
 |
 |
 |
 |
Date :
2015-02-27 14:14:10 |
By :
onjira |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
Quote:Code (VB.NET)
01. Imports System.Data.SqlClient
02. Public Class Form1
03. Public employee_ID As String
04. Dim AddItemValue As New List(Of keypair)
05.
06. Dim gender As String
07.
08.
09.
10.
11.
12. Private Sub Form1_Load(sender As Object , e As EventArgs) Handles MyBase .Load
13. setddgender()
14.
15. End Sub
16.
17. Private Sub setddGender()
18. AddItemValue.Add( New keypair( "ชาย" , "M" ))
19. AddItemValue.Add( New keypair( "หญิง" , "F" ))
20.
21. For Each AddItemValues As keypair In AddItemValue
22. ComboBox1.Items.Add(AddItemValues.Name)
23. Next
24. End Sub
25.
26. Private Sub ctrecord_Click(sender As Object , e As EventArgs) Handles ctrecord.Click
27. Dim Con As New conn()
28. Dim strCon As New SqlConnection(Con.strConn)
29. strCon.Open()
30. Dim datadate As String = ""
31.
32.
33. Dim Conm As New SqlCommand( "insemployee_data" , strCon)
34. Conm.CommandType = CommandType.StoredProcedure
35. Conm.Parameters.Add( "@employee" , SqlDbType.VarChar, 50).Value = TextBox1.Text.Trim
36. Conm.Parameters.Add( "@name" , SqlDbType.VarChar, 100).Value = TextBox2.Text.Trim
37. Conm.Parameters.Add( "@startdate" , SqlDbType.VarChar).Value = DateTimePicker1.Text.Trim
38. Conm.Parameters.Add( "@department" , SqlDbType.VarChar, 50).Value = TextBox3.Text.Trim
39. Conm.Parameters.Add( "@sex" , SqlDbType.VarChar, 50).Value = ComboBox1
40. Conm.Parameters.Add( "@phon" , SqlDbType.VarChar, 50).Value = TextBox4.Text.Trim
41.
42.
43. Conm.ExecuteNonQuery()
44. strCon.Close()
45. clear_text()
46. viewemployee.Show()
47. End Sub
48. Private Sub ComboBox1_SelectedIndexChanged(sender As Object , e As EventArgs) Handles ComboBox1.SelectedIndexChanged
49. Dim SelectedText As String = ComboBox1.Items(ComboBox1.SelectedIndex).ToString
50. For Each AddItemValues As keypair In AddItemValue
51. If SelectedText = AddItemValues.Name Then
52. gender = AddItemValues.KeyName
53.
54. End If
55. Next
56. End Sub
57. Private Sub clear_text()
58. TextBox1.Text = ""
59. TextBox2.Text = ""
60. TextBox3.Text = ""
61. TextBox4.Text = ""
62. DateTimePicker1.Text = ""
63. ComboBox1.Text = ""
64.
65. End Sub
66.
67. Private Sub LinkLabel1_LinkClicked(sender As Object , e As LinkLabelLinkClickedEventArgs) Handles LinkLabel1.LinkClicked
68. viewemployee.Show()
69.
70. End Sub
71. End Class
|
 |
 |
 |
 |
Date :
2015-07-24 11:06:12 |
By :
กนกวรรณ หมั่นกิจ |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ขอเป็น c# หน่อยครับพรีสสสส
|
 |
 |
 |
 |
Date :
2017-04-10 09:22:29 |
By :
pongsakorn |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ผมใช้วิธีนี้ครับ
'//////////////// สำหรับการแสดงผลใน datagrid ครับ
Dim sqlstr As String = "SELECT * FROM Table"
Dim cs As New SqlConnection
Dim adp as SqlDataAdapter
adp = New SqlDataAdapter(sqlstr, cs)
adp.Fill(ds, "tablename")
adp.FillSchema(ds, SchemaType.Source, "tablename")
Me.DataGridView1.DataSource = ds
Me.DataGridView1.DataMember = "tablename"
'////////////// สำหรับ update ข้อมูลจาก datagrid ลง database ครับ ตอบสนองต่อ event ที่ต้องการนะครับ
Dim cmdbuilder As New SqlCommandBuilder(adp)
Dim i As Integer
Try
i = adp.Update(ds, "tablename")
MsgBox("Records Updated= " & i)
Catch ex As Exception
MsgBox(ex.Message)
End Try
ลองดูนะครับ ไม่รู้ช่วยได้แค่ไหนนะครับ
|
 |
 |
 |
 |
Date :
2017-07-06 22:44:57 |
By :
khasri |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
|
|