Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 109,037

HOME > .NET Framework > Forum > รบกวนช่วยดู Code Insert and Update นี้ให้หน่อยครับคือข้อมูล Update ให้ครับ แต่ไม่ Insert ให้



 

รบกวนช่วยดู Code Insert and Update นี้ให้หน่อยครับคือข้อมูล Update ให้ครับ แต่ไม่ Insert ให้

 



Topic : 127162



โพสกระทู้ ( 314 )
บทความ ( 0 )



สถานะออฟไลน์




เอา code ของ แอดมาปรับใช้ดูอะครับ
อันนี้เป็นรูปที่ insert และ update
จะเห็นว่า ID 2 ไม่ insert ให้อะครับ แต่ Update ได้ปกติ

NewUpload1

ส่วนอันนี้เป็นไฟล์ Excel ครับผมเพิ่ม ID 2 เข้าไป

ดกฟหดกฟดกดกดกหฟด

Code (VB.NET)
  Protected Sub btnAdd_Click(sender As Object, e As EventArgs) Handles btnAdd.Click

        If Not IsNothing(myFile1.PostedFile) Then

            Dim UlFileName As String
            Dim i As Integer

            UlFileName = "MyXls/" & System.IO.Path.GetFileName(myFile1.ToString)

            '*** Save Images ***'
            myFile1.PostedFile.SaveAs(Server.MapPath(UlFileName))

            '*** Create Excel.Application ***'
            Dim xlApp As New Excel.Application
            Dim xlBook As Excel.Workbook
            Dim xlSheet1 As Excel.Worksheet

            xlBook = xlApp.Workbooks.Open(Server.MapPath(UlFileName))
            xlBook.Application.Visible = False

            xlSheet1 = xlBook.Worksheets(1)

            '*** Create DataTable ***'
            Dim dt As New System.Data.DataTable
            Dim dr As System.Data.DataRow

            '*** Column ***'
            dt.Columns.Add("ProductID")
            dt.Columns.Add("PartName")
            i = 2
            Do While Not Trim(xlSheet1.Cells.Item(i, 1).Value) = ""
                '*** Rows ***'
                dr = dt.NewRow
                dr("ProductID") = xlSheet1.Cells.Item(i, 1).Value
                dr("PartName") = xlSheet1.Cells.Item(i, 2).Value

                dt.Rows.Add(dr)
                i = i + 1
            Loop

            '*** End DataTable ***'

            ''*** Insert to Database ***'
            objConn = New SqlConnection
            With objConn
                .ConnectionString = strConn
                If objConn.State = ConnectionState.Closed Then
                    .Open()
                End If
            End With
            Try
                sqlTmp = "SELECT Count(*) From TbSpecproductest Where ProductID = '" & dt.Rows(0)("ProductID") & "'"
                'DA = New SqlDataAdapter(sqlTmp, objConn)
                'DS = New DataSet
                'DA.Fill(DS, "TABLE")
                objConn = New SqlConnection

                With objConn
                    .ConnectionString = strConn
                    If objConn.State = ConnectionState.Closed Then
                        .Open()
                    End If
                End With
                objCmd = New SqlCommand
                With objCmd
                    .Connection = objConn
                    .CommandType = CommandType.Text
                    .CommandText = sqlTmp
                End With
                objCmd.ExecuteScalar()

                If objCmd.ExecuteScalar > 0 Then
                    For i = 0 To dt.Rows.Count - 1
                        sqlTmp = "Update TbSpecproductest Set partname = '" & dt.Rows(i)("Partname") & "' "
                        sqlTmp &= "Where ProductID = '" & dt.Rows(i)("ProductID") & "'"
                        objCmd = New SqlCommand
                        With objCmd
                            .Connection = objConn
                            .CommandType = CommandType.Text
                            .CommandText = sqlTmp
                        End With
                        objCmd.ExecuteNonQuery()
                    Next
                Else
                    For i = 0 To dt.Rows.Count - 1
                        sqlTmp = "INSERT INTO TbSpecproductest (ProductID,PartName)"
                        sqlTmp &= "Values ('" & dt.Rows(i)("ProductID") & "','" & dt.Rows(i)("PartName") & "')"
                        objCmd = New SqlCommand
                        With objCmd
                            .Connection = objConn
                            .CommandType = CommandType.Text
                            .CommandText = sqlTmp
                        End With
                        objCmd.ExecuteNonQuery()
                    Next
                End If





            Catch ex As Exception

            End Try


            xlApp.Application.Quit()
            xlApp.Quit()
            xlSheet1 = Nothing
            xlBook = Nothing
            xlApp = Nothing
        End If

    End Sub





Tag : .NET, Web (ASP.NET), VB.NET







Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2017-04-10 23:13:01 By : adminliver View : 935 Reply : 11
 

 

No. 1



โพสกระทู้ ( 4,440 )
บทความ ( 23 )



สถานะออฟไลน์
Facebook

Code
sqlTmp = "SELECT Count(*) From TbSpecproductest Where ProductID = '" & dt.Rows(0)("ProductID") & "'"


แปลตามก็คือ

แถวแรก คอลัม ProductID รึ ป่าวครับ

เว้ากันซื่อคือ
SELECT เอาแถวแรกมา (ซึ่งมันมีค่าอยู่แล้ว objCmd.ExecuteScalar > 0 แน่นอน)
แล้วไป Update Rows(i) ซึ่งอาจจะมีรึไม่มีก็ได้

ไกด์ให้แล้วนะครับ
ลองหาทางแก้ดู






แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2017-04-11 08:38:00 By : lamaka.tor
 


 

No. 2

Guest


Code (VB.NET)
sqlTmp = "SELECT Count(*) From TbSpecproductest Where ProductID = '" & dt.Rows(0)("ProductID") & "'"


ประเด็นคือคุณจับที่ RowIndex = 0 หรือแถวที่หนึ่งอย่างเดียว
แถวที่สองไม่ได้ทำอะไรกับมันเลยนะ
คุณจะทำยังไงให้มันอ่านค่าจากแถวที่สองแล้วนำไปเช็คว่ามีในดาต้าเบสหรือไม่ล่ะครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2017-04-11 08:57:10 By : tester
 

 

No. 3



โพสกระทู้ ( 314 )
บทความ ( 0 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 1 เขียนโดย : lamaka.tor เมื่อวันที่ 2017-04-11 08:38:00
รายละเอียดของการตอบ ::
ขอบคุณมากครับ ^_^

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2017-04-11 09:18:31 By : adminliver
 


 

No. 4



โพสกระทู้ ( 314 )
บทความ ( 0 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 2 เขียนโดย : tester เมื่อวันที่ 2017-04-11 08:57:10
รายละเอียดของการตอบ ::
ใช่ครับผมลองทำอยู่ว่าจะเอา select .ให้มัน Check ทุกๆ row อิย่างไงดี มึนมานานละยังทำบ่ได้เลย 555555
ขอบคุณมากๆครับ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2017-04-11 09:20:35 By : adminliver
 


 

No. 5



โพสกระทู้ ( 4,440 )
บทความ ( 23 )



สถานะออฟไลน์
Facebook

ดูจาก ค้อนแซบ จะเป็นประมาณนี้รึป่าวครับ

1. อ่านค่าใน excel มาเก็บใน dt
2.เอาค่าใน dt มา Update ข้อมูลใน TbSpecproductest

สามารถทำได้โดยไม่ต้องเก็บค่าใน dt ก็ได้ครับ

นี่แค่โค้ดคร่าวๆนะครับ ลองเอาไปโมใหม่ดู
Code (VB.NET)
 Using objConn As New SqlConnection("conection string")
            objConn.Open()
            Do While Not Trim(xlSheet1.Cells.Item(i, 1).Value) = ""
                '*** Rows ***'
                sqlTmp = "SELECT Count(*) From TbSpecproductest Where ProductID = '" & xlSheet1.Cells.Item(i, 1).Value & "'"
                Dim count As Integer
                'เช็คค่าในระบบก่อนว่ามีรึป่าว
                Using objCmd As New SqlCommand(sqlTmp, objConn)
                    count = objCmd.ExecuteScalar()
                End Using
                'set sqlTmp ใหม่
                If count > 1 Then
                    'มี ก็ให้ Update
                    sqlTmp = "Update TbSpecproductest Set partname = '" & xlSheet1.Cells.Item(i, 2).Value & "' "
                    sqlTmp &= "Where ProductID = '" & xlSheet1.Cells.Item(i, 1).Value & "'"
                Else
                    'ไม่มี ก็ให้ INSERT
                    sqlTmp = "INSERT INTO TbSpecproductest (ProductID,PartName)"
                    sqlTmp &= "Values ('" & xlSheet1.Cells.Item(i, 2).Value & "','" & xlSheet1.Cells.Item(i, 1).Value & "')"
                End If

                ' เอา sqlTmp มาใช้งานซะเลย
                Using objCmd As New SqlCommand(sqlTmp, objConn)
                    objCmd.ExecuteScalar()
                End Using

                i = i + 1
            Loop
End Using


แบบนี้โค้ดจะสั้นลง
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2017-04-11 10:30:54 By : lamaka.tor
 


 

No. 6



โพสกระทู้ ( 314 )
บทความ ( 0 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 5 เขียนโดย : lamaka.tor เมื่อวันที่ 2017-04-11 10:30:54
รายละเอียดของการตอบ ::
ผมลองแบบนี้มันบันทึกเบิ้ลอะครับ
Code (VB.NET)
 Using objConn As New SqlConnection(strConn)
                objConn.Open()
                Try
                    Do While Not Trim(xlSheet1.Cells.Item(i, 1).Value) = ""
                        '*** Rows ***'
                        dr = dt.NewRow
                        dr("ProductID") = xlSheet1.Cells.Item(i, 1).Value
                        dr("PartName") = xlSheet1.Cells.Item(i, 2).Value
                        '*** Rows ***'

                        sqlTmp = "Select Count(*) From TbSpecproductest Where ProductID = '" & xlSheet1.Cells.Item(i, 1).Value & "'"
                        Dim count As Integer
                        'เช็คค่าในระบบก่อนว่ามีรึป่าว
                        Using objCmd As New SqlCommand(sqlTmp, objConn)
                            count = objCmd.ExecuteScalar()
                        End Using
                        'set sqlTmp ใหม่
                        If count > 1 Then
                            'มี ก็ให้ Update
                            sqlTmp = "Update TbSpecproductest Set partname = '" & xlSheet1.Cells.Item(i, 2).Value & "' "
                            sqlTmp &= "Where ProductID = '" & xlSheet1.Cells.Item(i, 1).Value & "'"
                        Else
                            'ไม่มี ก็ให้ INSERT
                            sqlTmp = "INSERT INTO TbSpecproductest (ProductID,PartName)"
                            sqlTmp &= "Values ('" & xlSheet1.Cells.Item(i, 1).Value & "','" & xlSheet1.Cells.Item(i, 2).Value & "')"
                        End If
                        ' เอา sqlTmp มาใช้งานซะเลย
                        Using objCmd As New SqlCommand(sqlTmp, objConn)
                            objCmd.ExecuteScalar()
                        End Using
                        i = i + 1
                    Loop
                Catch ex As Exception

                End Try

            End Using


แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2017-04-11 16:28:47 By : adminliver
 


 

No. 7



โพสกระทู้ ( 4,440 )
บทความ ( 23 )



สถานะออฟไลน์
Facebook

ตอบความคิดเห็นที่ : 6 เขียนโดย : adminliver เมื่อวันที่ 2017-04-11 16:28:47
รายละเอียดของการตอบ ::
บันทึกเบิ้ลคือบันทึก 2 รอบ หรือ ว่า insert id ที่เคยมีอยู่แล้วเพิ่มรึป่าวครับ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2017-04-11 16:40:56 By : lamaka.tor
 


 

No. 8



โพสกระทู้ ( 4,440 )
บทความ ( 23 )



สถานะออฟไลน์
Facebook

ตอบความคิดเห็นที่ : 7 เขียนโดย : lamaka.tor เมื่อวันที่ 2017-04-11 16:40:56
รายละเอียดของการตอบ ::
ผมว่าน่าจะผิดที่ผมนี่แหละครับโทษที 555

เปลี่ยนจาก count > 1 เป็น count > 0 นะครับ

ไม่งั้นมันจะ Insert ตลอด

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2017-04-11 16:48:15 By : lamaka.tor
 


 

No. 9



โพสกระทู้ ( 314 )
บทความ ( 0 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 8 เขียนโดย : lamaka.tor เมื่อวันที่ 2017-04-11 16:48:15
รายละเอียดของการตอบ ::
ขออนุญาตถาม Code หน่อยครับ ^_^

Dim dt As New System.Data.DataTable
Dim dr As System.Data.DataRow
dt.Columns.Add("ProductID")
dt.Columns.Add("PartName")
i = 2 ***** ทำไม i ต้องเท่ากัน 2 ด้วยครับ ผมลองใส่ 1 ก็บันทึกได้เหมือนกัน
Using objConn As New SqlConnection(strConn)
objConn.Open()
Try
Do While Not Trim(xlSheet1.Cells.Item(i, 1).Value) = ""
dr = dt.NewRow
dr("ProductID") = xlSheet1.Cells.Item(i, 1).Value
dr("PartName") = xlSheet1.Cells.Item(i, 2).Value
dt.Rows.Add(dr)
************ อยากถามว่า dr = dt.newrow คือมันไปดึง dt ของข้างบนมาอ่านใช่ป่าวครับ ********


แล้วก็อีก 1 code ทำไม่ต้อง i = i + 1 ความหมายมันคือยังไงครับ

ขอบคุณมากๆครับ


แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2017-04-11 17:18:22 By : adminliver
 


 

No. 10



โพสกระทู้ ( 4,440 )
บทความ ( 23 )



สถานะออฟไลน์
Facebook

ตอบความคิดเห็นที่ : 9 เขียนโดย : adminliver เมื่อวันที่ 2017-04-11 17:18:22
รายละเอียดของการตอบ ::
ตอบแบบบ้านๆ ตามความคิดเห็นส่วนตัว นะครับ

Code
i = 2 ***** ทำไม i ต้องเท่ากัน 2 ด้วยครับ ผมลองใส่ 1 ก็บันทึกได้เหมือนกัน

ต้องรื้อมาจาก
xlSheet1.Cells.Item(i, 1).Value i=แถวที่ 1= คอลัมที่
i จะเริ่มจากเท่าไหร่ก็ได้ ตราบที่มันมากกว่า 0

ถามกลับไปว่า แล้ว ข้อมูล ใน excel ของเรา เริ่มจากแถวที่เท่าไหร่ นั่นแหละคือจุดเริ่มต้น เป็น 5 เป็น 10 ก็ได้แล้วแต่ว่าจะต้องการข้อมูลแรกตรงแถวไหนนั่นเอง

Code
อยากถามว่า dr = dt.newrow คือมันไปดึง dt ของข้างบนมาอ่านใช่ป่าวครับ

อันนี้ต้องศึกษาเรื่อง datatable ครับ
จากโค้ด จะประมาณ ว่า เอา excel มายัดลง datatable ส่วนจะเอาไป ออกเป็น datagrid หรือทำอย่างอื่นก็ย่อมได้

ส่วนของท่าน วัตถุประสงค์ มันบอกอยู่แล้วว่าจะบันทึกข้อมูลจาก excel ดังนั้นไม่จำเป็นต้องผ่าน datatable สามารถ ตัดลงตอนบันทึกข้อมูลได้เลย

Code
แล้วก็อีก 1 code ทำไม่ต้อง i = i + 1 ความหมายมันคือยังไงครับ

เพราะว่าในโค้ดใช้ Do While (ลองหาอ่านดูละกัน) มันจะไม่เพิ่มจำนวน/step เหมือน for loop
เพราะชื่อมันก็บอกอยู่แล้วว่ามันจะวน จนกระทั่ง ตรงตามเงื่อนไขเงื่อน
เพราะงั้น หาก ทำงานกับ ตัวเลข เราจะต้อง เพิ่มเองเหมือน

i = i + 1

ตามข้อสงสัยนั่นเอง

หากยังมีข้อสงสัยทำไมผมถึงใช้
Code (VB.NET)
Using objConn As New SqlConnection(strConn)
objConn.Open()
'code 
End Using


ก็เพราะ มือใหม่ส่วนใหญ่ มัก เสียเวลามางมอยู่กับ Connection
เดี๋ยวก็ต้องมา open/close แล้วยังต้องมานั่งเช็คอีกว่าตรงลง เปิดไปยังหว่า
แถมบางราย มัน open อยู่ ก็ close มันซะ แล้ว บรรทัดต่อมาก็เปิดใหม่

การใช้ Using จะตัดปัญหาพวกนี้ได้เลย


ก็ประมาณนี้แหละครับ 5555

สรุปว่า บันทึกได้ปกติ นะครับ


แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2017-04-11 18:51:14 By : lamaka.tor
 


 

No. 11



โพสกระทู้ ( 314 )
บทความ ( 0 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 10 เขียนโดย : lamaka.tor เมื่อวันที่ 2017-04-11 18:51:14
รายละเอียดของการตอบ ::
สุดๆๆๆๆย๊อดดดดดดด ผมนิขอบคุณหลายยยยเลยครับ
บันทึกได้เรียบร้อยครับผม
ขอบคุณอีกครั้งครับทั้งเขียนโค้ดทั้งอธิบาย กราบน้ำใจงามๆ เลยครับ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2017-04-11 23:31:31 By : adminliver
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : รบกวนช่วยดู Code Insert and Update นี้ให้หน่อยครับคือข้อมูล Update ให้ครับ แต่ไม่ Insert ให้
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: นำเข้าสินค้าจากจีน, Taobao, เฟอร์นิเจอร์, ของพรีเมี่ยม, ร่ม, ปากกา, power bank, แฟลชไดร์ฟ, กระบอกน้ำ

Load balance : Server 00
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2024 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่