 |
|
รบกวนท่านผู้รู้ช่วยดูให้หน่อยค่ะว่า ทำไมหนู Import DataGridView To SQL Database ข้อมูลเข้า db ไม่ได้สักที T^T |
|
 |
|
|
 |
 |
|
ExecuteNonQuery() จะต้องอยู่ใน Loop ด้วยน่ะครับ
|
 |
 |
 |
 |
Date :
2011-09-07 17:36:04 |
By :
webmaster |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
Code (VB.NET)
For I = 0 To DataGridView.RowCount - 1
myCommand.Parameters.Add(@One;, Grid.items(i).value)
myCommand.Parameters.Add(@two;, Grid.items(i).value)
mycommand.executenonquery()
Next
ประมาณนี้ครับ
|
 |
 |
 |
 |
Date :
2011-09-07 17:38:07 |
By :
webmaster |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
เขียนให้เลยแล้วกันครับ ให้ Check Syntax ด้วยครับ
Code (VB.NET)
Dim objConn As New SqlConnection
Dim strConnString, strSQL As String
Dim objCmd As SqlCommand()
strConnString = "Server=localhost;UID=sa;PASSWORD=;database=mydatabase;Max Pool Size=400;Connect Timeout=600;"
objConn.ConnectionString = strConnString
objConn.Open()
For i = 0 To DataGridView.RowCount - 1
strSQL = "INSERT INTO files (Name,FilesName,FilesType) " & _
" VALUES " & _
" (@sName,@sFilesName,@sFilesType)"
objCmd = New SqlCommand(strSQL, objConn)
objCmd.Parameters.Add("@sName", SqlDbType.VarChar).Value = Grid.items(i).value
objCmd.Parameters.Add("@sFilesName", SqlDbType.Binary).Value = Grid.items(i).value
objCmd.Parameters.Add("@sFilesType", SqlDbType.VarChar).Value = Grid.items(i).value
objCmd.ExecuteNonQuery()
Next
objConn.Close()
objConn = Nothing
Go to : ต้องการบันทึกข้อมูลจาก DataGridView ลงฐานข้อมูล Database หลาย ๆ แถวพร้อมกัน ครับ
|
 |
 |
 |
 |
Date :
2011-09-07 17:41:15 |
By :
webmaster |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
หนูลองทำดู แล้วมันก็ขึ้น error แบบนี้อ่ะค่ะ


|
ประวัติการแก้ไข 2011-09-07 22:47:06
 |
 |
 |
 |
Date :
2011-09-07 22:44:39 |
By :
nUnGnInG_ReScUe |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ตรง Grid.Item(i).value ต้องอ้างถึง DataGridView1.rows(i).cell("").value ไม่ใช่่หรือครับ
New SqlCommand() ตอนประกาศตัวแปรเลย
อย่าลืม objcmd.Parameters.Clear() หลัง objcmd.ExecuteNonquery()
ลองดูครับ
|
 |
 |
 |
 |
Date :
2011-09-08 09:24:40 |
By :
่ำVC#.Net |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ขอบคุณทั้งพี่วินและคุณเอ นะคะ ลองทำตามแล้ว..แต่ก็ยังไม่ได้อยู่ดีง่าาา T^T
|
 |
 |
 |
 |
Date :
2011-09-09 13:18:31 |
By :
nUnGnInG_ReScUe |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
คือว่า...ข้อมูลที่มันโชว์ใน datagrid มันมาจากการที่หนู browse เลือกไฟล์ขึ้นมาแล้วให้มันโชว์ใน datagrid นะคะ ไม่ทราบว่ามันเกี่ยวมั๊ยที่มัน เก็บลงใน sql ไม่ได้สักที ><
|
 |
 |
 |
 |
Date :
2011-09-09 15:06:52 |
By :
nUnGnInG_ReScUe |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
Code (C#)
com = new SqlCommand();
{
com.CommandType = CommandType.Text;
com.CommandText = savehaed;
com.Parameters.Clear();
com.Connection = con;
com.Parameters.Add("@OU_Code", SqlDbType.VarChar).Value = Idou_code.ToString();
com.Parameters.Add("@Doc_No", SqlDbType.VarChar).Value = dataGridView1.Rows[i].Cells[0].Value;
com.Parameters.Add("@Bat_No", SqlDbType.VarChar).Value = dataGridView1.Rows[i].Cells[1].Value;
com.Parameters.Add("@old_price", SqlDbType.VarChar).Value = dataGridView1.Rows[i].Cells[2].Value;
com.Parameters.Add("@u_price", SqlDbType.VarChar).Value = dataGridView1.Rows[i].Cells[3].Value;
com.Parameters.Add("@amount", SqlDbType.VarChar).Value = dataGridView1.Rows[i].Cells[4].Value;
com.Parameters.Add("@totall", SqlDbType.VarChar).Value = dataGridView1.Rows[i].Cells[5].Value;
com.Parameters.Add("@fg_name", SqlDbType.VarChar).Value = dataGridView1.Rows[i].Cells[6].Value;
com.Parameters.Add("@add_date", SqlDbType.Date).Value = dateTimePicker1.Value.ToString("dd / MM / yyyy");
com.ExecuteNonQuery();
}
เอาไปเป็นตัวอย่างนะคับ
|
ประวัติการแก้ไข 2011-09-09 15:23:48
 |
 |
 |
 |
Date :
2011-09-09 15:21:34 |
By :
Testprogram |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
แงๆๆ ทำไม่ได้อ่ะ หนูลองทำตามที่ คุณA แล้วก็พี่วินบอก ก็ยังไม่ได้อยู่ดี หรือมันจะเกี่ยวกับที่หนู ใช้การ browse ไฟล์ขึ้นมาโชว์ที่ datagrid คะ รบกวนพี่ๆดู โค้ดให้หนูหน่อยนะคะ หนูลองหาโค้ดมาทำเป็นเดือนแล้วก็ไม่ได้สักที จนต้องมาโพสต์ขอความช่วยเหลือจากพี่ๆแล้วง่าาา ช่วยหน่อยนะคะ หนูต้องส่งอาทิตย์หน้าแล้ว T^T
Code (VB.NET)
Imports System.IO
Imports System.Text
Imports System.Data
Imports System.Data.SqlClient
Imports System.Data.OleDb
Public Class Form1
Dim Conn As SqlConnection
Dim com As SqlCommand
Dim tr As SqlTransaction
Dim sb As New StringBuilder()
Dim strConn As String
Dim da As New SqlDataAdapter
Dim ds As DataSet = New DataSet
Dim stringPath As String = Application.StartupPath
Private Sub btnBrowse_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBrowse.Click
' โค้ดการ Browse file มาโชว์ที่ datagridview
Dim ofd As New OpenFileDialog()
'Filter เฉพาะ Text และ csv ไฟล์
ofd.Filter = "All file(*.txt,*.scv)|*.txt;*.csv|Text files(*.txt)|*.txt|CSV (*.csv)|*.csv"
Dim _path As String = ""
Dim _filenname As String = ""
Dim dt As New DataTable()
If ofd.ShowDialog() = DialogResult.OK Then
'ดึงพาธของไฟล์ csv มาเก็บไว้ที่ตัวแปร _path
_path = Path.GetDirectoryName(ofd.FileName)
'ดึงเฉพาะชื่อไฟล์ (*.scv) มาเก็บไว้ที่ตัวแปร _filenname
_filenname = Path.GetFileName(ofd.FileName)
'แสดงป้ายชื่อพาธเต็มของไฟล์ (*.csv)
Labelshow.Text = ofd.FileName
'connection string โยนพาธไฟล์ (*.csv) เข้าไปที่ [Source] ตามที่ผู้ใช้งานเลือก จาก OpenFileDialog
'Extended Properties:
' HDR=YES หมายความว่าให้แสดงข้อมูลในไฟล์ (*.csv) บรรทัดแรกเป็นชื่อ Column
' HDR=NO หมายความว่า ให้ถือบรรทัดแรกเป็นเนื้อของข้อมูล และให้แทน Column ด้วย F1,F2…ไปเรื่อยๆตามจำนวน Column ของข้อมูล
Dim conString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + _path + ";Extended Properties=""Text;HDR=YES;FMT=Delimited"""
Dim conn As New OleDbConnection(conString)
'โยนชื่อเฉพาะชื่อไฟล์ เข้าไปใน Sql statement
Dim da As New OleDbDataAdapter("Select * from " + _filenname, conn)
'บรรจุ(Fill) ข้อมูลให้ DataTable (dt)
da.Fill(dt)
'กำหนด DataTable (dt) ให้เป็นแหล่งข้อมูลของ dataGridView1
DataGridView1.DataSource = dt
End If
End Sub
Private Sub btnImport_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnImport.Click
Dim objConn As New SqlConnection
Dim strConnString, strSQL As String
Dim objCmd As SqlCommand()
strConnString = "Server=localhost;UID=sa;PASSWORD=paisolalee;database=cdrdb;Max Pool Size=400;Connect Timeout=600;"
objConn.ConnectionString = strConnString
objConn.Open()
For i = 0 To DataGridView1.RowCount - 1
strSQL = "INSERT INTO cdr(running_no,sms,username,tel_user,tel_receive,tel_sub,status_sent,status_receive,date_submit,date_server,amount_char,content_sms) " & _
" VALUES " & _
" (@running_no,@sms,@username,@tel_user,@tel_receive,@tel_sub,@status_sent,@status_receive,@date_submit,@date_server,@amount_char,@content_sms)"
objCmd = New SqlCommand(strSQL, objConn)
objCmd.Parameters.Add("@running_no", SqlDbType.VarChar).Value = DataGridView1.Rows(i).cell(0).value
objCmd.Parameters.Add("@sms", SqlDbType.Binary).Value = DataGridView1.Rows(i).cell(1).value
objCmd.Parameters.Add("@username", SqlDbType.VarChar).Value = DataGridView1.Rows(i).cell(2).value
objCmd.Parameters.Add("@tel_user", SqlDbType.VarChar).Value = DataGridView1.Rows(i).cell(3).value
objCmd.Parameters.Add("@tel_receive", SqlDbType.VarChar).Value = DataGridView1.Rows(i).cell(4).value
objCmd.Parameters.Add("@tel_sub", SqlDbType.VarChar).Value = DataGridView1.Rows(i).cell(5).value
objCmd.Parameters.Add("@status_sent", SqlDbType.VarChar).Value = DataGridView1.Rows(i).cell(6).value
objCmd.Parameters.Add("@status_receive", SqlDbType.VarChar).Value = DataGridView1.Rows(i).cell(7).value
objCmd.Parameters.Add("@date_submit", SqlDbType.VarChar).Value = DataGridView1.Rows(i).cell(8).value
objCmd.Parameters.Add("@date_server", SqlDbType.VarChar).Value = DataGridView1.Rows(i).cell(9).value
objCmd.Parameters.Add("@amount_char", SqlDbType.VarChar).Value = DataGridView1.Rows(i).cell(10).value
objCmd.Parameters.Add("@content_sms", SqlDbType.VarChar).Value = DataGridView1.Rows(i).cell(11).value
objCmd.ExecuteNonQuery()
objCmd.Parameters.Clear()
Next
MessageBox.Show("บันทึกข้อมูลแล้ว")
objConn.Close()
objConn = Nothing
End Sub
End Class
error มันขึ้นแบบนี้อ่ะค่ะ

|
ประวัติการแก้ไข 2011-09-09 16:40:43 2011-09-09 16:49:01 2011-09-09 16:50:31
 |
 |
 |
 |
Date :
2011-09-09 16:37:33 |
By :
nUnGnInG_ReScUe |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
Code (VB.NET)
objCmd.Parameters.Add("@password", SqlDbType.int).Value =Convert.ToInt32(DataGridView1.Rows(i).cell("2").value)
ในฐานข้อมูลเป้นข้อมูลชนิดไหนคับ
ลอง Convert ดูนะคับ
ผมพึงเจอมาเหมือกัน    
ผมไม่แน่ใจว่าคุณวาง
objCmd.Parameters.Clear()
ถูกหรือปล่าว น่าจะเอาไปวาง ข้างล่าง
next
นะคับ
|
ประวัติการแก้ไข 2011-09-09 16:55:56 2011-09-09 17:00:04 2011-09-09 17:03:36
 |
 |
 |
 |
Date :
2011-09-09 16:52:55 |
By :
Testprogram |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
cell มันเริ่มที่ 0 ใช่ไหมคะ หนูก็ใส่ถูกแล้วไม่ใช่หรอ??
Code (VB.NET)
objCmd.Parameters.Add("@running_no", SqlDbType.VarChar).Value = DataGridView1.Rows(i).cell(0).value
objCmd.Parameters.Add("@sms", SqlDbType.Binary).Value = DataGridView1.Rows(i).cell(1).value
objCmd.Parameters.Add("@username", SqlDbType.VarChar).Value = DataGridView1.Rows(i).cell(2).value
objCmd.Parameters.Add("@tel_user", SqlDbType.VarChar).Value = DataGridView1.Rows(i).cell(3).value
objCmd.Parameters.Add("@tel_receive", SqlDbType.VarChar).Value = DataGridView1.Rows(i).cell(4).value
objCmd.Parameters.Add("@tel_sub", SqlDbType.VarChar).Value = DataGridView1.Rows(i).cell(5).value
objCmd.Parameters.Add("@status_sent", SqlDbType.VarChar).Value = DataGridView1.Rows(i).cell(6).value
objCmd.Parameters.Add("@status_receive", SqlDbType.VarChar).Value = DataGridView1.Rows(i).cell(7).value
objCmd.Parameters.Add("@date_submit", SqlDbType.VarChar).Value = DataGridView1.Rows(i).cell(8).value
objCmd.Parameters.Add("@date_server", SqlDbType.VarChar).Value = DataGridView1.Rows(i).cell(9).value
objCmd.Parameters.Add("@amount_char", SqlDbType.VarChar).Value = DataGridView1.Rows(i).cell(10).value
objCmd.Parameters.Add("@content_sms", SqlDbType.VarChar).Value = DataGridView1.Rows(i).cell(11).value
|
 |
 |
 |
 |
Date :
2011-09-09 16:59:53 |
By :
nUnGnInG_ReScUe |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ตอบความคิดเห็นที่ : 11 เขียนโดย : Testprogram เมื่อวันที่ 2011-09-09 16:52:55
รายละเอียดของการตอบ ::
ฐานข้อมูลเป็น NVarchar หมดเลยค่ะ (แก้ใหม่แล้วค่ะ เป็น
Code (VB.NET)
objCmd.Parameters.Add("@running_no", SqlDbType.NVarChar).Value = DataGridView1.Rows(i).cell(0).value
objCmd.Parameters.Add("@sms", SqlDbType.NVarChar).Value = DataGridView1.Rows(i).cell(1).value
objCmd.Parameters.Add("@username", SqlDbType.NVarChar).Value = DataGridView1.Rows(i).cell(2).value
objCmd.Parameters.Add("@tel_user", SqlDbType.NVarChar).Value = DataGridView1.Rows(i).cell(3).value
objCmd.Parameters.Add("@tel_receive", SqlDbType.NVarChar).Value = DataGridView1.Rows(i).cell(4).value
objCmd.Parameters.Add("@tel_sub", SqlDbType.NVarChar).Value = DataGridView1.Rows(i).cell(5).value
objCmd.Parameters.Add("@status_sent", SqlDbType.NVarChar).Value = DataGridView1.Rows(i).cell(6).value
objCmd.Parameters.Add("@status_receive", SqlDbType.NVarChar).Value = DataGridView1.Rows(i).cell(7).value
objCmd.Parameters.Add("@date_submit", SqlDbType.NVarChar).Value = DataGridView1.Rows(i).cell(8).value
objCmd.Parameters.Add("@date_server", SqlDbType.NVarChar).Value = DataGridView1.Rows(i).cell(9).value
objCmd.Parameters.Add("@amount_char", SqlDbType.NVarChar).Value = DataGridView1.Rows(i).cell(10).value
objCmd.Parameters.Add("@content_sms", SqlDbType.NVarChar).Value = DataGridView1.Rows(i).cell(11).value
)
|
ประวัติการแก้ไข 2011-09-09 17:08:21
 |
 |
 |
 |
Date :
2011-09-09 17:03:09 |
By :
nUnGnInG_ReScUe |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
objCmd.Parameters.Clear() วางไว้ข้างล่าง next แล้วค่ะ แต่ error ยังเท่าเดิมอยู่เลยค่ะ
|
 |
 |
 |
 |
Date :
2011-09-09 17:06:34 |
By :
nUnGnInG_ReScUe |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ลองเพิ่มแค่คอลัมภ์เดียวก่อน
หวังว่า คุณไม่ได้บังคับคอลัมภ์ ว่าต้องมีข้อมูลในตอนออกแบบตารางนะครับ
(cells ต้องมี s ด้วย)
Code (VB.NET)
Private Sub btnImport_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnImport.Click
Dim objConn As New SqlConnection
Dim strConnString, strSQL As String
Dim objCmd As SqlCommand()
strConnString = "Server=localhost;UID=sa;PASSWORD=paisolalee;database=cdrdb;Max Pool Size=400;Connect Timeout=600;"
objConn.ConnectionString = strConnString
objConn.Open()
strSQL = "INSERT INTO cdr(running_no) VALUES(@running_no)"
objCmd = New SqlCommand(strSQL, objConn)
objCmd.Parameters.Add("@running_no", SqlDbType.VarChar)
For i = 0 To DataGridView1.RowCount - 1
objCmd.Parameters("@running_no").Value = DataGridView1.Rows(i).cells(0).value
objCmd.ExecuteNonQuery()
Next
MessageBox.Show("บันทึกข้อมูลแล้ว")
objConn.Close()
objConn = Nothing
End Sub
|
ประวัติการแก้ไข 2011-09-09 17:14:03 2011-09-09 17:14:58
 |
 |
 |
 |
Date :
2011-09-09 17:13:26 |
By :
watcharop |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
มัน Error ที่บรรทัดที่ 60 ครับ
Error
Dim objCmd As SqlCommand()
not Error
Dim objCmd As SqlCommand
ที่่เหลือลองไล่ Debug ดูครับ
|
 |
 |
 |
 |
Date :
2011-09-09 17:47:36 |
By :
่ำVC#.Net |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
เง้อๆๆ หนูลองทำตามที่คุณหางอึ่ง แล้วก็คุณเอบอกแล้วนะคะ แต่พอรันแล้วมันขึ้นอย่างนี้อ่าาา

|
ประวัติการแก้ไข 2011-09-10 23:19:20 2011-09-10 23:51:14 2011-09-11 00:12:36 2011-09-11 00:42:21 2011-09-11 00:43:32
 |
 |
 |
 |
Date :
2011-09-10 23:16:37 |
By :
nUnGnInG_ReScUe |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
เง้อออออ พอมีใครทราบบ้างมั๊ยคะว่ามัน error เพราะอะไรอ่าาาา??
|
 |
 |
 |
 |
Date :
2011-09-11 20:13:18 |
By :
nUnGnInG_ReScUe |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ลองแบบนี้ดู
strConnString = "Server=localhost;UID=sa;PASSWORD=paisolalee;database=cdrdb;Max Pool Size=400;ConnectTimeout=600;"
objConn.ConnectionString = strConnString
objConn.Open()
objCmd = New SqlClient.SqlCommand(strSQL, objConn)
strSQL = "INSERT INTO cdr(running_no) VALUES(@running_no)"
objCmd.Parameters.Add("@running_no", SqlDbType.VarChar).Value = "111"
objCmd.ExecuteNonQuery()
ไม่ต้องวน Loop GridView
ถ้าได้ ค่อยเอา Code ไปวางใน loop
objCmd = New SqlClient.SqlCommand(strSQL, objConn)
strSQL = "INSERT INTO cdr(running_no) VALUES(@running_no)"
objCmd.Parameters.Add("@running_no", SqlDbType.VarChar).Value = "111"
objCmd.ExecuteNonQuery()
|
 |
 |
 |
 |
Date :
2011-09-11 21:43:49 |
By :
VC#.Net |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
เย่ๆๆ ตอนนี้มัน import ได้แแล้วค่ะ แต่ว่า พอ browse เลือกไฟล์ เสร็จแล้วกด import แทนที่มันจะขึ้น message box โชว์ว่า "บันทึกข้อมูลแล้ว" แต่มันขึ้น warning เตือน line 82 ซึ่งก็คือ objCmd.ExecuteNonQuery() (เหมือนรูปที่หนู capture ให้ดูด้านบน) ซึ่งเหมือนมันจะ import ไม่ได้ แต่หนูลองเข้าไปดูใน sql ปรากฏว่า ข้อมูลมันได้เข้าแล้ว แล้วอย่างนี้มันหมายความว่ายังไงอ่ะคะ
|
 |
 |
 |
 |
Date :
2011-09-13 09:07:33 |
By :
nUnGnInG_ReScUe |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ที่ Import ได้เพราะไม่ได้ Control Transaction รอบก่อนหน้านี้มันสามารถ Execute ผ่านได้
พอถึงรอบนี้มันจะ Error ถ้า Control Transaction มันก็จะทำการ Rollback ข้อมูลรอบก่อนหน้าก็จะไม่มี
การบันทึกครับ
http://kasem-mesak.blogspot.com/2011/02/vbnet-transaction.html
Code ไกล้สำเร็จแล้วถ้าไงลองเอา Code มา Post อีกที
|
 |
 |
 |
 |
Date :
2011-09-13 09:56:17 |
By :
่ำVC#.Net |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ตามตัวอย่างนี้ดูครับ
Code (VB.NET)
Imports System.Data
Imports System.Data.SqlClient
Imports System.Text
Public Class Form1
Private com As New SqlCommand
Private con As New SqlConnection
Private sb As New StringBuilder
Private tr As SqlTransaction
Private strsql As String
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
End Sub
Private Sub CreateConnectDB()
If con.State = ConnectionState.Open Then con.Close()
con.ConnectionString = "Data Source=127.0.01;Initial Catalog=DBProduct;Persist Security Info=True;User ID=sa;Password=1234"
con.Open()
End Sub
Private Sub CreateDataCommand(ByVal sql As String)
com.CommandType = CommandType.Text
com.CommandText = sql
com.Connection = con
com.Transaction = tr
com.Parameters.Clear()
End Sub
Private Sub InsertDataToDB()
CreateConnectDB()
tr = con.BeginTransaction()
Try
For index As Integer = 0 To DataGridView1.Rows.Count - 1
sb.Remove(0, sb.Length)
sb.Append(" Insert Into Product (ProductId,ProductName,ProductQty,ProductPrice) ")
' (" Values (type string,type string, type int , type double) ")
sb.Append(" Values (@ProductId,@ProductName,@ProductQty,@ProductPrice) ")
strsql = sb.ToString()
CreateDataCommand(strsql)
com.Parameters.AddWithValue("@ProductId", DataGridView1.Rows(index).Cells(0).Value.ToString())
com.Parameters.AddWithValue("@ProductName", DataGridView1.Rows(index).Cells(0).Value.ToString())
com.Parameters.AddWithValue("@ProductQty", Integer.Parse(DataGridView1.Rows(index).Cells(0).Value.ToString()))
com.Parameters.AddWithValue("@ProductPrice", Double.Parse(DataGridView1.Rows(index).Cells(0).Value.ToString()))
com.ExecuteNonQuery()
Next
tr.Commit()
MsgBox("บันทึกข้อมูลเรียบร้อย", MsgBoxStyle.Information, "ผลการทำงาน")
Catch ex As Exception
tr.Rollback()
MsgBox("ไม่สามารถบันทึกข้อมูลได้ เนื่องจาก" & ex.ToString(), MsgBoxStyle.Critical, "ผลการทำงาน")
End Try
End Sub
End Class
|
 |
 |
 |
 |
Date :
2011-09-13 10:03:01 |
By :
lee_latee |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
โทษทีครับ ลืมเปลี่ยน index Grid
แก้ตามนี้ครับ
Code (VB.NET)
For index As Integer = 0 To DataGridView1.Rows.Count - 1
sb.Remove(0, sb.Length)
sb.Append(" Insert Into Product (ProductId,ProductName,ProductQty,ProductPrice) ")
' (" Values (type string,type string, type int , type double) ")
sb.Append(" Values (@ProductId,@ProductName,@ProductQty,@ProductPrice) ")
strsql = sb.ToString()
CreateDataCommand(strsql)
com.Parameters.AddWithValue("@ProductId", DataGridView1.Rows(index).Cells(0).Value.ToString())
com.Parameters.AddWithValue("@ProductName", DataGridView1.Rows(index).Cells(1).Value.ToString())
com.Parameters.AddWithValue("@ProductQty", Integer.Parse(DataGridView1.Rows(index).Cells(2).Value.ToString()))
com.Parameters.AddWithValue("@ProductPrice", Double.Parse(DataGridView1.Rows(index).Cells(3).Value.ToString()))
com.ExecuteNonQuery()
Next
|
 |
 |
 |
 |
Date :
2011-09-13 10:05:18 |
By :
lee_latee |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
เอ่อ..พี่เอคะ คือว่าหนูยังงงๆอยุ่ว่า ให้หนูทำ transaction ก่อน หรือว่า ให้หนูโพสต์ โค้ดตอนนี้ ก่อนอ่ะคะ
|
 |
 |
 |
 |
Date :
2011-09-13 17:56:03 |
By :
nUnGnInG_ReScUe |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
โพสต์ โค้ดตอนนี้ ก่อน เมื่อแก้ Bug ได้แล้วค่อยปรับแก้ให้มีการ Control Transaction (ศึกษาทำความเข้าใจกับ Transaction ก่อนครับ) ซึ่งดูจากตัวอย่างที่คุณ tee นำตัวอย่างมาให้ดู
หรือว่าจะดูกระทู้เก่า ๆ ในบอร์ด์ก็ได้ครับ
|
 |
 |
 |
 |
Date :
2011-09-13 18:26:23 |
By :
่ำVC#.Net |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
Code (VB.NET)
Private Sub btnImport_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnImport.Click
Dim objConn As New SqlConnection
Dim strConnString, strSQL As String
Dim objCmd As SqlCommand
strConnString = "Server=localhost;UID=sa;PASSWORD=paisolalee;database=cdrdb;Max Pool Size=400;Connect Timeout=600;"
objConn.ConnectionString = strConnString
objConn.Open()
For i = 0 To DataGridView1.RowCount - 1
strSQL = "INSERT INTO cdr(running_no,sms,username,tel_user,tel_receive,tel_sub,status_sent,status_receive,date_submit,date_server,amount_char,content_sms) VALUES (@running_no,@sms,@username,@tel_user,@tel_receive,@tel_sub,@status_sent,@status_receive,@date_submit,@date_server,@amount_char,@content_sms)"
objCmd = New SqlCommand(strSQL, objConn)
objCmd.Parameters.Add("@running_no", SqlDbType.VarChar).Value = DataGridView1.Rows(i).Cells(0).Value()
objCmd.Parameters.Add("@sms", SqlDbType.NVarChar).Value = DataGridView1.Rows(i).Cells(1).Value
objCmd.Parameters.Add("@username", SqlDbType.NVarChar).Value = DataGridView1.Rows(i).Cells(2).Value
objCmd.Parameters.Add("@tel_user", SqlDbType.NVarChar).Value = DataGridView1.Rows(i).Cells(3).Value
objCmd.Parameters.Add("@tel_receive", SqlDbType.NVarChar).Value = DataGridView1.Rows(i).Cells(4).Value
objCmd.Parameters.Add("@tel_sub", SqlDbType.NVarChar).Value = DataGridView1.Rows(i).Cells(5).Value
objCmd.Parameters.Add("@status_sent", SqlDbType.NVarChar).Value = DataGridView1.Rows(i).Cells(6).Value
objCmd.Parameters.Add("@status_receive", SqlDbType.NVarChar).Value = DataGridView1.Rows(i).Cells(7).Value
objCmd.Parameters.Add("@date_submit", SqlDbType.NVarChar).Value = DataGridView1.Rows(i).Cells(8).Value
objCmd.Parameters.Add("@date_server", SqlDbType.NVarChar).Value = DataGridView1.Rows(i).Cells(9).Value
objCmd.Parameters.Add("@amount_char", SqlDbType.NVarChar).Value = DataGridView1.Rows(i).Cells(10).Value
objCmd.Parameters.Add("@content_sms", SqlDbType.NVarChar).Value = DataGridView1.Rows(i).Cells(11).Value
objCmd.ExecuteNonQuery()
Next
objCmd.Parameters.Clear()
MessageBox.Show("บันทึกข้อมูลแล้ว")
objConn.Close()
objConn = Nothing
End Sub
อ้อ...แล้วก็ มี warning เตือนแบบนี้ด้วยนะคะ หนูไม่ทราบว่ามันมีส่วนเกี่ยวข้องไหมอ่ะค่ะ

|
 |
 |
 |
 |
Date :
2011-09-14 09:35:41 |
By :
nUnGnInG_ReScUe |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
1.เอาบรรทัดที่ 13, 14 ไปไว้ที่บรรทัด 11
เพราะถ้าวางใน Loop for การทำงานในแต่ละครั้งจะมี Step การทำงานเพิ่มขึ้นอีก 2 step ถ้ามี 100 รอบ Step การทำงาน = 100 * 2
(มันไม่ได้กระทบอะไรมากมายหรอกครับ)
2,แล้วลองเช็คบรรทัดที่ 15 ดู
3,เอาบรรทัดที่ 31 ไปวางบรรทัดที่ 28
4,ถ้าจะให้ดีลองเอา Warning ที่เห็นไปแปลดูก่อนคราวหน้าเจอจะได้แก้ได้
5.แล้วลองดูการ Control Transaction ตามแบบของคุณ tee ดูครับ
|
 |
 |
 |
 |
Date :
2011-09-14 11:07:00 |
By :
่ำVC#.Net |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
อ่อ หนูพอเข้าใจ transaction แล้ว จากกระทู้นี้ >> https://www.thaicreate.com/dotnet/forum/047985.html ขอบคุณนะคะ ^^
|
ประวัติการแก้ไข 2011-09-14 15:54:07
 |
 |
 |
 |
Date :
2011-09-14 14:59:25 |
By :
nUnGnInG_ReScUe |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
|
|