|  | 
	                
  
    |  |  
    | 
        
        ต้องการบันทึกข้อมูลจาก DataGridView ลงฐานข้อมูล Database หลาย ๆ แถวพร้อมกัน ครับ     |  
    |  |  
 
	
		|  |  |  |  |  
		|  |  | 
          
            | ต้องการบันทึกข้อมูลจาก Datagrid ลงฐานข้อมูลหลายๆแถวพร้อมกัน ครับ 
 code Vb.net
 
 Code (VB.NET)
 
 Private Sub BtnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnSave.Click
       
        strsql = "insert into OrderDetail(OrderID,ProductID,NumberOrder,UnitID,Weight,UnitWeightID,Driver,RegisDriver) values(@OrderId,@ProductID,@ProductName,@NumberOrder,@UnitID,@Weight,@UnitWeightID,@Driver,@RegisDriver)"
        objCmd = New System.Data.SqlClient.SqlCommand(strsql, DbConn)
        For i As Integer = 0 To DataGridOrder.RowCount - 1
            If Not DataGridOrder.Rows(i).IsNewRow Then
                With objCmd
                    .Parameters.Add(New SqlParameter("@OrderId", orderID.Text))
                    .Parameters.Add(New SqlParameter("@ProductID", DataGridOrder.Rows(i).Cells(0).Value))
                    .Parameters.Add(New SqlParameter("@NumberOrder", DataGridOrder.Rows(i).Cells(1).Value))
                    .Parameters.Add(New SqlParameter("@UnitId", DataGridOrder.Rows(i).Cells(2).Value))
                    .Parameters.Add(New SqlParameter("@Weight", DataGridOrder.Rows(i).Cells(3).Value))
                    .Parameters.Add(New SqlParameter("@UnitWeightID", DataGridOrder.Rows(i).Cells(4).Value))
                    .Parameters.Add(New SqlParameter("@Driver", Driver.Text))
                    .Parameters.Add(New SqlParameter("@RegisDriver", RegisDriver.Text))
                End With
            End If
        Next
        objCmd.ExecuteNonQuery()
        MessageBox.Show("บันทึกข้อมูลแล้ว")
        DbConn.Close()
        DataGridOrder.Rows.Clear()
    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 :
                          17226 | 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)
 
 objCmd.Parameters.Clear()
 
 Code (VB.NET)
 
 Private Sub BtnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnSave.Click
       
        strsql = "insert into OrderDetail(OrderID,ProductID,NumberOrder,UnitID,Weight,UnitWeightID,Driver,RegisDriver) values(@OrderId,@ProductID,@ProductName,@NumberOrder,@UnitID,@Weight,@UnitWeightID,@Driver,@RegisDriver)"
        objCmd = New System.Data.SqlClient.SqlCommand(strsql, DbConn)
        For i As Integer = 0 To DataGridOrder.RowCount - 1
            If Not DataGridOrder.Rows(i).IsNewRow Then
                With objCmd
                    .Parameters.Add(New SqlParameter("@OrderId", orderID.Text))
                    .Parameters.Add(New SqlParameter("@ProductID", DataGridOrder.Rows(i).Cells(0).Value))
                    .Parameters.Add(New SqlParameter("@NumberOrder", DataGridOrder.Rows(i).Cells(1).Value))
                    .Parameters.Add(New SqlParameter("@UnitId", DataGridOrder.Rows(i).Cells(2).Value))
                    .Parameters.Add(New SqlParameter("@Weight", DataGridOrder.Rows(i).Cells(3).Value))
                    .Parameters.Add(New SqlParameter("@UnitWeightID", DataGridOrder.Rows(i).Cells(4).Value))
                    .Parameters.Add(New SqlParameter("@Driver", Driver.Text))
                    .Parameters.Add(New SqlParameter("@RegisDriver", RegisDriver.Text))
                End With
		objCmd.ExecuteNonQuery()
		objCmd.Parameters.Clear()
            End If
        Next
        
        MessageBox.Show("บันทึกข้อมูลแล้ว")
        DbConn.Close()
End Sub
 หรือ
 
 Code (VB.NET)
 
 Private Sub BtnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnSave.Click
       
        strsql = "insert into OrderDetail(OrderID,ProductID,NumberOrder,UnitID,Weight,UnitWeightID,Driver,RegisDriver) values(@OrderId,@ProductID,@ProductName,@NumberOrder,@UnitID,@Weight,@UnitWeightID,@Driver,@RegisDriver)"
        
        For i As Integer = 0 To DataGridOrder.RowCount - 1
            If Not DataGridOrder.Rows(i).IsNewRow Then
		objCmd = New System.Data.SqlClient.SqlCommand(strsql, DbConn)
                With objCmd
                    .Parameters.Add(New SqlParameter("@OrderId", orderID.Text))
                    .Parameters.Add(New SqlParameter("@ProductID", DataGridOrder.Rows(i).Cells(0).Value))
                    .Parameters.Add(New SqlParameter("@NumberOrder", DataGridOrder.Rows(i).Cells(1).Value))
                    .Parameters.Add(New SqlParameter("@UnitId", DataGridOrder.Rows(i).Cells(2).Value))
                    .Parameters.Add(New SqlParameter("@Weight", DataGridOrder.Rows(i).Cells(3).Value))
                    .Parameters.Add(New SqlParameter("@UnitWeightID", DataGridOrder.Rows(i).Cells(4).Value))
                    .Parameters.Add(New SqlParameter("@Driver", Driver.Text))
                    .Parameters.Add(New SqlParameter("@RegisDriver", RegisDriver.Text))
                End With
		objCmd.ExecuteNonQuery()
            End If
        Next
        
        MessageBox.Show("บันทึกข้อมูลแล้ว")
        DbConn.Close()
        DataGridOrder.Rows.Clear()
    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)
 
 If myCon.State = ConnectionState.Open Then
            myCon.Close()
        End If
        myCon.ConnectionString = strConn
        myCon.Open()
        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)"
        objCmd = New System.Data.SqlClient.SqlCommand(strSql, myCon)
        For i As Integer = 0 To dgvEmp.RowCount - 1
            If Not dgvEmp.Rows(i).IsNewRow Then
                objCmd = New System.Data.SqlClient.SqlCommand(strSql, myCon)
                With objCmd
                    .Parameters.Add(New SqlParameter("@id", txtId.Text))
                    .Parameters.Add(New SqlParameter("@emp_name", dgvEmp.Rows(i).Cells(0).Value))
                    .Parameters.Add(New SqlParameter("@emp_address", dgvEmp.Rows(i).Cells(1).Value))
                    .Parameters.Add(New SqlParameter("@emp_phone", dgvEmp.Rows(i).Cells(2).Value))
                    .Parameters.Add(New SqlParameter("@emp_gender", dgvEmp.Rows(i).Cells(3).Value))
                    .Parameters.Add(New SqlParameter("@Status", dgvEmp.Rows(i).Cells(4).Value))
                    .Parameters.Add(New SqlParameter("@Username", dgvEmp.Rows(i).Cells(5).Value))
                    .Parameters.Add(New SqlParameter("@Password", dgvEmp.Rows(i).Cells(6).Value))
                End With
                objCmd.ExecuteNonQuery()
            End If
        Next
        MessageBox.Show("บันทึกข้อมุลแล้ว")
        myCon.Close()
        dgvEmp.Rows.Clear()
 |  
              | 
                
                  |  |  |  |  
                  |  | 
                      
                        | Date :
                            2015-02-27 14:14:10 | By :
                            onjira |  |  |  
                  |  |  |  |  |  |  |  
          |  |  |  |  |  
 
        
          |  |  |  |  |  
          |  |  | 
            
              |  Quote: Code (VB.NET)
 Imports System.Data.SqlClient
Public Class Form1
    Public employee_ID As String
    Dim AddItemValue As New List(Of keypair)
    '  Dim AddItemDate As New List(Of keypair)
    Dim gender As String                                                '
    ' Dim vardate As String
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        setddgender()
    End Sub
    Private Sub setddGender()
        AddItemValue.Add(New keypair("ชาย", "M"))
        AddItemValue.Add(New keypair("หญิง", "F"))
        For Each AddItemValues As keypair In AddItemValue
            ComboBox1.Items.Add(AddItemValues.Name)
        Next
    End Sub
    Private Sub ctrecord_Click(sender As Object, e As EventArgs) Handles ctrecord.Click
        Dim Con As New conn()
        Dim strCon As New SqlConnection(Con.strConn)
        strCon.Open()
        Dim datadate As String = ""
        Dim Conm As New SqlCommand("insemployee_data", strCon)
        Conm.CommandType = CommandType.StoredProcedure
        Conm.Parameters.Add("@employee", SqlDbType.VarChar, 50).Value = TextBox1.Text.Trim
        Conm.Parameters.Add("@name", SqlDbType.VarChar, 100).Value = TextBox2.Text.Trim
        Conm.Parameters.Add("@startdate", SqlDbType.VarChar).Value = DateTimePicker1.Text.Trim
        Conm.Parameters.Add("@department", SqlDbType.VarChar, 50).Value = TextBox3.Text.Trim
        Conm.Parameters.Add("@sex", SqlDbType.VarChar, 50).Value = ComboBox1
        Conm.Parameters.Add("@phon", SqlDbType.VarChar, 50).Value = TextBox4.Text.Trim
        Conm.ExecuteNonQuery()
        strCon.Close()
        clear_text()
        viewemployee.Show()
    End Sub
    Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged
        Dim SelectedText As String = ComboBox1.Items(ComboBox1.SelectedIndex).ToString
        For Each AddItemValues As keypair In AddItemValue
            If SelectedText = AddItemValues.Name Then
                gender = AddItemValues.KeyName
            End If
        Next
    End Sub
    Private Sub clear_text()
        TextBox1.Text = ""
        TextBox2.Text = ""
        TextBox3.Text = ""
        TextBox4.Text = ""
        DateTimePicker1.Text = ""
        ComboBox1.Text = ""
    End Sub
    Private Sub LinkLabel1_LinkClicked(sender As Object, e As LinkLabelLinkClickedEventArgs) Handles LinkLabel1.LinkClicked
        viewemployee.Show()
    End Sub
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 |  |  |  
                  |  |  |  |  |  |  |  
          |  |  |  |  |  |  |