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,038

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


 

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

 
Topic : 127162



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



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



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

NewUpload1

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

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

Code (VB.NET)
001.Protected Sub btnAdd_Click(sender As Object, e As EventArgs) Handles btnAdd.Click
002. 
003.      If Not IsNothing(myFile1.PostedFile) Then
004. 
005.          Dim UlFileName As String
006.          Dim i As Integer
007. 
008.          UlFileName = "MyXls/" & System.IO.Path.GetFileName(myFile1.ToString)
009. 
010.          '*** Save Images ***'
011.          myFile1.PostedFile.SaveAs(Server.MapPath(UlFileName))
012. 
013.          '*** Create Excel.Application ***'
014.          Dim xlApp As New Excel.Application
015.          Dim xlBook As Excel.Workbook
016.          Dim xlSheet1 As Excel.Worksheet
017. 
018.          xlBook = xlApp.Workbooks.Open(Server.MapPath(UlFileName))
019.          xlBook.Application.Visible = False
020. 
021.          xlSheet1 = xlBook.Worksheets(1)
022. 
023.          '*** Create DataTable ***'
024.          Dim dt As New System.Data.DataTable
025.          Dim dr As System.Data.DataRow
026. 
027.          '*** Column ***'
028.          dt.Columns.Add("ProductID")
029.          dt.Columns.Add("PartName")
030.          i = 2
031.          Do While Not Trim(xlSheet1.Cells.Item(i, 1).Value) = ""
032.              '*** Rows ***'
033.              dr = dt.NewRow
034.              dr("ProductID") = xlSheet1.Cells.Item(i, 1).Value
035.              dr("PartName") = xlSheet1.Cells.Item(i, 2).Value
036. 
037.              dt.Rows.Add(dr)
038.              i = i + 1
039.          Loop
040. 
041.          '*** End DataTable ***'
042. 
043.          ''*** Insert to Database ***'
044.          objConn = New SqlConnection
045.          With objConn
046.              .ConnectionString = strConn
047.              If objConn.State = ConnectionState.Closed Then
048.                  .Open()
049.              End If
050.          End With
051.          Try
052.              sqlTmp = "SELECT Count(*) From TbSpecproductest Where ProductID = '" & dt.Rows(0)("ProductID") & "'"
053.              'DA = New SqlDataAdapter(sqlTmp, objConn)
054.              'DS = New DataSet
055.              'DA.Fill(DS, "TABLE")
056.              objConn = New SqlConnection
057. 
058.              With objConn
059.                  .ConnectionString = strConn
060.                  If objConn.State = ConnectionState.Closed Then
061.                      .Open()
062.                  End If
063.              End With
064.              objCmd = New SqlCommand
065.              With objCmd
066.                  .Connection = objConn
067.                  .CommandType = CommandType.Text
068.                  .CommandText = sqlTmp
069.              End With
070.              objCmd.ExecuteScalar()
071. 
072.              If objCmd.ExecuteScalar > 0 Then
073.                  For i = 0 To dt.Rows.Count - 1
074.                      sqlTmp = "Update TbSpecproductest Set partname = '" & dt.Rows(i)("Partname") & "' "
075.                      sqlTmp &= "Where ProductID = '" & dt.Rows(i)("ProductID") & "'"
076.                      objCmd = New SqlCommand
077.                      With objCmd
078.                          .Connection = objConn
079.                          .CommandType = CommandType.Text
080.                          .CommandText = sqlTmp
081.                      End With
082.                      objCmd.ExecuteNonQuery()
083.                  Next
084.              Else
085.                  For i = 0 To dt.Rows.Count - 1
086.                      sqlTmp = "INSERT INTO TbSpecproductest (ProductID,PartName)"
087.                      sqlTmp &= "Values ('" & dt.Rows(i)("ProductID") & "','" & dt.Rows(i)("PartName") & "')"
088.                      objCmd = New SqlCommand
089.                      With objCmd
090.                          .Connection = objConn
091.                          .CommandType = CommandType.Text
092.                          .CommandText = sqlTmp
093.                      End With
094.                      objCmd.ExecuteNonQuery()
095.                  Next
096.              End If
097. 
098. 
099. 
100. 
101. 
102.          Catch ex As Exception
103. 
104.          End Try
105. 
106. 
107.          xlApp.Application.Quit()
108.          xlApp.Quit()
109.          xlSheet1 = Nothing
110.          xlBook = Nothing
111.          xlApp = Nothing
112.      End If
113. 
114.  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 : 975 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)
1.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)
01.Using objConn As New SqlConnection("conection string")
02.            objConn.Open()
03.            Do While Not Trim(xlSheet1.Cells.Item(i, 1).Value) = ""
04.                '*** Rows ***'
05.                sqlTmp = "SELECT Count(*) From TbSpecproductest Where ProductID = '" & xlSheet1.Cells.Item(i, 1).Value & "'"
06.                Dim count As Integer
07.                'เช็คค่าในระบบก่อนว่ามีรึป่าว
08.                Using objCmd As New SqlCommand(sqlTmp, objConn)
09.                    count = objCmd.ExecuteScalar()
10.                End Using
11.                'set sqlTmp ใหม่
12.                If count > 1 Then
13.                    'มี ก็ให้ Update
14.                    sqlTmp = "Update TbSpecproductest Set partname = '" & xlSheet1.Cells.Item(i, 2).Value & "' "
15.                    sqlTmp &= "Where ProductID = '" & xlSheet1.Cells.Item(i, 1).Value & "'"
16.                Else
17.                    'ไม่มี ก็ให้ INSERT
18.                    sqlTmp = "INSERT INTO TbSpecproductest (ProductID,PartName)"
19.                    sqlTmp &= "Values ('" & xlSheet1.Cells.Item(i, 2).Value & "','" & xlSheet1.Cells.Item(i, 1).Value & "')"
20.                End If
21. 
22.                ' เอา sqlTmp มาใช้งานซะเลย
23.                Using objCmd As New SqlCommand(sqlTmp, objConn)
24.                    objCmd.ExecuteScalar()
25.                End Using
26. 
27.                i = i + 1
28.            Loop
29.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)
01.Using objConn As New SqlConnection(strConn)
02.               objConn.Open()
03.               Try
04.                   Do While Not Trim(xlSheet1.Cells.Item(i, 1).Value) = ""
05.                       '*** Rows ***'
06.                       dr = dt.NewRow
07.                       dr("ProductID") = xlSheet1.Cells.Item(i, 1).Value
08.                       dr("PartName") = xlSheet1.Cells.Item(i, 2).Value
09.                       '*** Rows ***'
10. 
11.                       sqlTmp = "Select Count(*) From TbSpecproductest Where ProductID = '" & xlSheet1.Cells.Item(i, 1).Value & "'"
12.                       Dim count As Integer
13.                       'เช็คค่าในระบบก่อนว่ามีรึป่าว
14.                       Using objCmd As New SqlCommand(sqlTmp, objConn)
15.                           count = objCmd.ExecuteScalar()
16.                       End Using
17.                       'set sqlTmp ใหม่
18.                       If count > 1 Then
19.                           'มี ก็ให้ Update
20.                           sqlTmp = "Update TbSpecproductest Set partname = '" & xlSheet1.Cells.Item(i, 2).Value & "' "
21.                           sqlTmp &= "Where ProductID = '" & xlSheet1.Cells.Item(i, 1).Value & "'"
22.                       Else
23.                           'ไม่มี ก็ให้ INSERT
24.                           sqlTmp = "INSERT INTO TbSpecproductest (ProductID,PartName)"
25.                           sqlTmp &= "Values ('" & xlSheet1.Cells.Item(i, 1).Value & "','" & xlSheet1.Cells.Item(i, 2).Value & "')"
26.                       End If
27.                       ' เอา sqlTmp มาใช้งานซะเลย
28.                       Using objCmd As New SqlCommand(sqlTmp, objConn)
29.                           objCmd.ExecuteScalar()
30.                       End Using
31.                       i = i + 1
32.                   Loop
33.               Catch ex As Exception
34. 
35.               End Try
36. 
37.           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)
1.Using objConn As New SqlConnection(strConn)
2.objConn.Open()
3.'code
4.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 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)





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