|
|
|
นำค่าจาก datagrid update ลง DB ได้ แต่ ข้อมูลที่ได้เป็นของrows สุดท้าย แก้ยังงไครับ |
|
|
|
|
|
|
|
ใช้ transaction ไม่เห็น commit() เลย
ทำแล้วค่าก็เหมือนเดิม
|
|
|
|
|
Date :
2010-08-07 15:30:22 |
By :
ชิน |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ใส่ไว้ตรงไหน commit น่ะ อย่าบอกนะว่าใส่ไว้ใน loop for
แต่ถ้าเป็นผม ผมไม่ทำหรอกนะ solution เนี่ย ผมจะใช้ dataadapter แทน
โดย convert datasource ของ datagridview มาเป็น datatable ก่อน
แล้วค่อยใช้ dataadapter update ข้อมูลทั้งตารางลงฐานข้อมูลเลยทีเดียว
ไม่ต้องมานั่งวนลูปในเมื่อย
|
|
|
|
|
Date :
2010-08-08 00:20:48 |
By :
tungman |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ใส่ไว้ตรงไหน commit น่ะ อย่าบอกนะว่าใส่ไว้ใน loop for
แต่ถ้าเป็นผม ผมไม่ทำหรอกนะ solution เนี่ย ผมจะใช้ dataadapter แทน
โดย convert datasource ของ datagridview มาเป็น datatable ก่อน
แล้วค่อยใช้ dataadapter update ข้อมูลทั้งตารางลงฐานข้อมูลเลยทีเดียว
ไม่ต้องมานั่งวนลูปในเมื่อย
ใส่นอก loop ครับ
พอทำแบบที่บอก
com = New SqlCommand("Update GenerateFG_Details SET Amount = '" & Convert.ToChar(dtGenFG.Columns(9)) & "',Amount_Total = '" & Convert.ToChar(dtGenFG.Columns(10)) & "' Where GenerateID = '" & txtGenerateID.Text.ToString & "'", Conn)
com.ExecuteNonQuery()
Error converting data type varchar to float.
Amount ,Amount_Total เป็น float ครับ
พอเปลี่ยนเป็น Convert.Tochar ขึ้นแบบนี้ Unable to cast object of type 'System.Data.DataColumn' to type 'System.IConvertible'.
|
|
|
|
|
Date :
2010-08-09 10:30:02 |
By :
ชิน |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ไม่ต้อง commit ไม่ต้องใช้ executenonquery ไม่ต้องวนลูป
ใช้ sqldataadapter
DataGridView --> DataTable
Code (VB.Net)
Dim Dt As New DataTable()
Dim Dv As DataView = DirectCast(dgv.DataSource, DataView)
Dt = Dv.ToTable()
DataTable --> SqlDataAdapter --> MS SQL Server (อัฟเดต)
Code (VB.Net)
Dim CommandString As String = "UPDATE [GenerateFG_Details] SET [Amount]=@Amount, [Amount_Total]=@Amount_Total WHERE [GenerateID]=@GenerateID"
Dim Command As New SqlCommand(CommandString, conn)
Command.Parameters.Add("@Amount", SqlDbType.Float, 8, "Amount") 'Amount คือชื่อ column ใน Dt อาจจะไม่ตรงเพราะผมไม่รู้ว่าคุณกำหนดไว้ชื่ออะไร
Command.Parameters.Add("Amount_Total", SqlDbType.Float, 8, "Amount_Total") 'Amount_Total คือชื่อ column ใน Dt อาจจะไม่ตรงเพราะผมไม่รู้ว่าคุณกำหนดไว้ชื่ออะไร
Command.Parameters.Add("@GenerateID", SqlDbType.NVarChar, 50, "GenerateID") 'GenerateID คือชื่อ column ใน Dt อาจจะไม่ตรงเพราะผมไม่รู้ว่าคุณกำหนดไว้ชื่ออะไร
Dim DataAdapter As New SqlDataAdapter()
DataAdapter.UpdateCommand = Command
DataAdapter.Update(Dt)
|
ประวัติการแก้ไข 2010-08-09 10:55:49
|
|
|
|
Date :
2010-08-09 10:55:03 |
By :
tungman |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
คุณ tungman ครับ
dtGenFG = CType(dgvProductionList.DataSource, DataTable)
Dim CommandString As String = "UPDATE [GenerateFG_Details] SET [Amount]=@Amount, [Amount_Total]=@Amount_Total WHERE [GenerateID]=@GenerateID"
Dim Command As New SqlCommand(CommandString, Conn)
Command.Parameters.Add("@Amount", SqlDbType.Float, 9, "Amount") 'Amount คือชื่อ column ใน Dt อาจจะไม่ตรงเพราะผมไม่รู้ว่าคุณกำหนดไว้ชื่ออะไร
Command.Parameters.Add("Amount_Total", SqlDbType.Float, 10, "Amount_Total") 'Amount_Total คือชื่อ column ใน Dt อาจจะไม่ตรงเพราะผมไม่รู้ว่าคุณกำหนดไว้ชื่ออะไร
Command.Parameters.Add("@GenerateID", SqlDbType.NVarChar, 0, "GenerateID") 'GenerateID คือชื่อ column ใน Dt อาจจะไม่ตรงเพราะผมไม่รู้ว่าคุณกำหนดไว้ชื่ออะไร
Dim DataAdapter As New SqlDataAdapter()
DataAdapter.UpdateCommand = Command
DataAdapter.Update(dtGenFG)
ค่าที่ได้ เหมือนเดิมครับ
ค่าในDatagrid ก่อน update
Amount =14
Amount_Total =10
ค่าที่ได้ใน DB
Amount =10
Amount_Total =10
ช่วยด้วยครับ ท่านที่รู้ ทำ3วันตัวนี้ตัวเดียวยังไม่ได้เลย
|
|
|
|
|
Date :
2010-08-09 12:01:51 |
By :
ชิน |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
add parameter แปลกๆ นะ
Command.Parameters.Add("@Amount", SqlDbType.Float, 9, "Amount")
Command.Parameters.Add("Amount_Total", SqlDbType.Float, 10, "Amount_Total")
Command.Parameters.Add("@GenerateID", SqlDbType.NVarChar, 0, "GenerateID")
เจ้า 9, 10, 0 มันคือ size นะ ทำไม nvarchar มันเท่ากับ 0 ล่ะ
|
|
|
|
|
Date :
2010-08-09 12:05:38 |
By :
tungman |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
add parameter แปลกๆ นะ
Command.Parameters.Add("@Amount", SqlDbType.Float, 9, "Amount")
Command.Parameters.Add("Amount_Total", SqlDbType.Float, 10, "Amount_Total")
Command.Parameters.Add("@GenerateID", SqlDbType.NVarChar, 0, "GenerateID")
เจ้า 9, 10, 0 มันคือ size นะ ทำไม nvarchar มันเท่ากับ 0 ล่ะ
เปลี่ยนแล้วครับค่าที่ได้ก็เหมือนเดิม
|
|
|
|
|
Date :
2010-08-09 12:26:14 |
By :
ชิน |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-_-" เปลี่ยนชื่อ column ที่ป้อนให้ parameter ให้ตรงกับของ dtGenFG จริงด้วยครับ
ของผมมันสมมุติ
|
|
|
|
|
Date :
2010-08-09 13:00:07 |
By :
tungman |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-_-" เปลี่ยนชื่อ column ที่ป้อนให้ parameter ให้ตรงกับของ dtGenFG จริงด้วยครับ
อันนี้แหละ ตรงแล้วครับ Amount,Amount_Total
|
|
|
|
|
Date :
2010-08-09 13:59:36 |
By :
ชิน |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ได้แล้วครับ ทุกคำตอบ ใช้ได้หมดเลย ครับ ใครจะนำไปใช้ก็ได้ครับ ทำได้หลายวิธี
ผมเขียนตกไปหน่อยครับ เพิ่ม WHERE(GenerateID = @GenerateID) AND ด้วย PrimaryKey
เพราะ GenerateID ของผมไม่ใช่ PrimaryKey
ขอบมากๆครับ
|
|
|
|
|
Date :
2010-08-09 15:34:30 |
By :
ชิน |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
จะให้นำวิธีเขียนตกไปใช้เหรอ ???
|
|
|
|
|
Date :
2010-08-09 20:30:19 |
By :
tungman |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 00
|