作者mdjason (左手)
看板Visual_Basic
標題[.NET] 迴圈應用的疑問
時間Thu Sep 22 12:57:45 2011
我想寫一個迴圈 希望可以每6筆就傳進一次資料庫
傳進資料庫之後把Datagridview的那6筆刪掉 等待新的6筆進來
下面是我自己寫的程式碼 一直出錯 請大大們指教
Dim xrow As DataRow = table.NewRow
Dim intI As Integer = 1
For intI = 1 To 6
xrow.Item(0) = RemoteIpEndPoint.Address.ToString
xrow.Item(1) = txtport.Text
xrow.Item(2) = Encoding.ASCII.GetString(receiveBytes)
table.Rows.Add(xrow)
Next intI
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.121.150.186
1F:推 serhgrt:把Dim xrow as DataRow 放進for 裡面? 09/22 13:43
2F:→ mdjason:不行耶 不知道為啥 都會跳錯誤 09/22 13:52
3F:推 serhgrt:錯誤訊息方便寫上來嗎? 因為也不知道出了啥錯誤? 09/22 16:07
4F:→ mdjason:RUN起來是沒有錯誤 可是直接執行程式的時候 會跳錯誤 09/22 16:10
5F:→ mdjason:我剛又自己試了一次 變成寫入一次 他幫我寫了六次進去... 09/22 16:12
6F:推 serhgrt:這段程式不是要寫入6筆? 錯誤還在嗎? 可以敘述錯誤一下嗎? 09/22 16:19
7F:→ mdjason:我現在變成一次寫進6條 然後寫第二次 變成12條了 09/22 16:38
8F:→ mdjason:我自己也不知道錯誤在哪耶 因為他沒有說明錯誤的點@@Y 09/22 16:41
9F:推 serhgrt:可以po比較完整點的程式碼嗎? 上面那段只能知道寫入6筆@_@ 09/22 16:43
Imports System.IO
Imports System.Net.Sockets.Socket
Imports System
Imports System.Text
Imports System.Net
Imports System.Net.Sockets
Imports Microsoft.VisualBasic
Imports System.Runtime.InteropServices
Public Class Form1
Inherits System.Windows.Forms.Form
Public receivingUdpClient As UdpClient
Public RemoteIpEndPoint As New
System.Net.IPEndPoint(System.Net.IPAddress.Any, 0)
Public ThreadReceive As System.Threading.Thread
Dim port As Integer
Private table As New DataTable
Public Sub ReceiveMessages()
Dim receiveBytes As [Byte]() =
receivingUdpClient.Receive(RemoteIpEndPoint)
txtip.Text = RemoteIpEndPoint.Address.ToString
Dim BitDet As BitArray
BitDet = New BitArray(receiveBytes)
Dim strReturnData As String =
System.Text.Encoding.Unicode.GetString(receiveBytes)
Dim intI As Integer = 1
For intI = 1 To 6
Dim xrow As DataRow = table.NewRow
xrow.Item(0) = RemoteIpEndPoint.Address.ToString
xrow.Item(1) = txtport.Text
xrow.Item(2) = Encoding.ASCII.GetString(receiveBytes)
table.Rows.Add(xrow)
Next intI
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
port = txtport.Text
receivingUdpClient = New System.Net.Sockets.UdpClient(port)
ThreadReceive = New System.Threading.Thread(AddressOf ReceiveMessages)
ThreadReceive.Start()
txtport.Enabled = True
Button2.Enabled = True
Button1.Enabled = False
DataGridView1.ReadOnly = True
txtport.ReadOnly = True
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button2.Click
ThreadReceive.Abort()
receivingUdpClient.Close()
Button2.Enabled = False
Button1.Enabled = True
txtip.Text = ""
DataGridView1.Enabled = False
txtport.ReadOnly = False
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
table.Columns.Add("IP")
table.Columns.Add("PORT")
table.Columns.Add("MSG")
DataGridView1.DataSource = table
DataGridView1.Columns(0).Width = 100
DataGridView1.Columns(1).Width = 70
DataGridView1.Columns(2).Width = 230
End Sub
End Class
※ 編輯: mdjason 來自: 140.121.150.186 (09/22 16:45)
10F:→ mdjason:我忘記我能編輯了 一直用推文 @@ 09/22 16:45
11F:推 serhgrt:你的DataTable是全域的 會變成累加,移至寫入6筆那邊吧! 09/22 16:52
12F:→ mdjason:好的 我再試試看 09/22 16:53
13F:→ mdjason:我移入Public Sub ReceiveMessages()那邊 他不給我宣告耶 09/22 16:55
Public Sub ReceiveMessages()
Dim receiveBytes As [Byte]() =
receivingUdpClient.Receive(RemoteIpEndPoint)
txtip.Text = RemoteIpEndPoint.Address.ToString
Dim BitDet As BitArray
BitDet = New BitArray(receiveBytes)
Dim strReturnData As String =
System.Text.Encoding.Unicode.GetString(receiveBytes)
***Dim table As New DataTable***
Dim intI As Integer = 1
For intI = 1 To 6
Dim xrow As DataRow = table.NewRow
xrow.Item(0) = RemoteIpEndPoint.Address.ToString
xrow.Item(1) = txtport.Text
xrow.Item(2) = Encoding.ASCII.GetString(receiveBytes)
table.Rows.Add(xrow)
Next intI
End Sub
我改成*** ***那樣 可是還是一次寫入6筆一樣的數據耶
※ 編輯: mdjason 來自: 140.121.150.186 (09/22 16:58)
14F:推 serhgrt:改成Dim table As New Datatable 放入? 09/22 16:57
15F:推 serhgrt:把抓封包資料的那幾段程式擺進去for,讓他重新取封包資料 09/22 17:15
16F:→ mdjason:非常感謝大大的幫忙 只是還是一次寫進6筆相同資料 頭疼>< 09/22 17:21
17F:推 serhgrt:你可能要查一下封包資料是否都沒變或是沒再重新抓取? 09/22 17:27
18F:→ mdjason:應該是沒重新抓取 我每次都要Stop→Start才能再收一次 09/22 17:33
19F:→ mathlinka:先將 DataTable 設為全域,ReceiveMessages 裡面不要寫 09/22 19:06
20F:→ mathlinka:迴圈,用 if DataTable.Rows.Count = 6 Then 09/22 19:07
21F:→ mathlinka:寫入資料庫 , 清空 DataTable 09/22 19:07
22F:→ mdjason:嗯 感謝樓上大大 還在實驗室練習@@ 09/22 20:00