代码重构

dmzhjg 2011-11-08 11:11:33
Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick
Timer2.Enabled = True

Timer2.Interval = 1000
'每一秒刷新一次
'遍历取值问题解决,i=i+1去掉
Try



Dim str2 As String = "server=localhost;database=test;user id=root;password=123;pooling=false;"

Dim conn1 As MySqlConnection = New MySqlConnection(str2)
conn1.Open()

'查詢資料
Dim str1 As String = "select * from wait_message where ustatus = '-1'"
Dim adapter1 As Common.DbDataAdapter = New MySqlDataAdapter(str1, conn1)

'將查詢結果放到記憶體testDataSet上的"wait_message"表格內
Dim testDataSet As DataSet = New DataSet
adapter1.Fill(testDataSet, "wait_message")

Dim i As Integer = 0

'它是按照0,2,4循环的.如果把i=i+1去掉可以读取到全部,不过跟弹出框和刷新不同步,控件读取数据的时间跟发送时间不同步问题,现在的问题还是不太清楚发送的数据有没有问题

For i = 0 To testDataSet.Tables("wait_message").Rows.Count - 1


MobPort.Text = testDataSet.Tables("wait_message").Rows(i).Item("uportnum")
TelNum_Text.Text = testDataSet.Tables("wait_message").Rows(i).Item("uphonenum")
'DeleteSms_Index.Text = testDataSet.Tables("wait_message").Rows(i).Item("ucontent") '此行是主鍵值,所以不打算顯示
SendSms_Text.Text = testDataSet.Tables("wait_message").Rows(i).Item("ucontent")
ReceiveSms_Text.Text = testDataSet.Tables("wait_message").Rows(i).Item("uIndex")
DeleteSms_Index.Text = testDataSet.Tables("wait_message").Rows(i).Item("ustatus")
'MsgBox(testDataSet.Tables("wait_message").Rows.Count - 1)
'MsgBox(MobPort.Text & testDataSet.Tables("wait_message").Rows(i).Item("uportnum"))
' MsgBox(i)
Next


Catch ex As Exception
MsgBox(ex.Message)
End Try




System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.Default
If Len(Trim(TelNum_Text.Text)) >= 11 And Sms_Send(Trim(TelNum_Text.Text), Trim(SendSms_Text.Text)) Then
Sms_Disconnection_Button.Enabled = False
MsgBox("发送短信成功!", MsgBoxStyle.Information, "提示")
'Else
' MsgBox("发送短信失败!", MsgBoxStyle.Critical, "警告")
System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.Default

Dim str2 As String = "server=localhost;database=test;user id=root;password=123;pooling=false;"

Dim conn1 As MySqlConnection = New MySqlConnection(str2)

conn1.Open()

Dim comstr As String
comstr = " UPDATE wait_message SET ustatus = '1' WHERE ustatus = '-1' "
Dim adapter1 As Common.DbDataAdapter = New MySqlDataAdapter(comstr, conn1)
Dim testDataSet As DataSet = New DataSet
adapter1.Fill(testDataSet, "wait_message")





''關閉資料庫的連結
conn1.Close()
'conn1.ConnectionString = Nothing



End If






Timer2.Enabled = False




End Sub

================
怎么把这两个dataSet和发送消息的代码分别重构为几个函数~
...全文
209 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
btxdlibin 2011-11-08
  • 打赏
  • 举报
回复
建议你将coon1定义成全局变量.
太频繁的打开断开数据库会降低性能.
在程序开始时连接一次就好了.或者自己定义什么时候打开.

Dim str2 As String = "server=localhost;database=test;user id=root;password=123;pooling=false;"
Dim conn1 As MySqlConnection = New MySqlConnection(str2)
conn1.Open()



'设计两个参数一个是链接数据库字符 constr 一个是已打开的数据库连接 conn
'返回一个dataset

Private Function setDataSet(ByVal conStr$, ByVal conn As MySqlConnection) As DataSet

Dim comstr As String
comstr = " UPDATE wait_message SET ustatus = '1' WHERE ustatus = '-1' "
Dim adapter1 As Common.DbDataAdapter = New MySqlDataAdapter(comstr, conn)
Dim tmpDataSet As DataSet = New DataSet
adapter1.Fill(tmpDataSet, "wait_message")
Return tmpDataSet
End Function

调用方法:
前提就是你已经打开了conn1
Dim comstr As String = " UPDATE wait_message SET ustatus = '1' WHERE ustatus = '-1' "
Dim testDataSet As DataSet = setDataSet(comstr, conn1)


拆分一个过程,只需要把其中一部分代码移出来,注意上下的变量传递就可以了.
dmzhjg 2011-11-08
  • 打赏
  • 举报
回复
然后用定时器去调用这些函数
dmzhjg 2011-11-08
  • 打赏
  • 举报
回复
msgbox会不会自动关闭的,而且我的为什么会一直弹出啊,是不是因为两个都写在循环里了
dmzhjg 2011-11-08
  • 打赏
  • 举报
回复
还有那个提示框为什么一直弹出啊...
dmzhjg 2011-11-08
  • 打赏
  • 举报
回复
谢谢啊,我真是太菜了,还有它要求连接字符串不要写死,要搞一个窗体
btxdlibin 2011-11-08
  • 打赏
  • 举报
回复
我这由于没有sqldata就没有办法测试了
如果调用不是很频繁conn1也不用定义成全局变量了.


那么你的代码就可以改成这样:
    Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick
Timer2.Enabled = True

Timer2.Interval = 1000
'每一秒刷新一次
'遍历取值问题解决,i=i+1去掉
Try

Dim str1$ = "select * from wait_message where ustatus = '-1'"
Dim testDataSet As DataSet = setDataSet(str1, conn1)
'查詢資料
'將查詢結果放到記憶體testDataSet上的"wait_message"表格內

'它是按照0,2,4循环的.如果把i=i+1去掉可以读取到全部,不过跟弹出框和刷新不同步,控件读取数据的时间跟发送时间不同步问题,现在的问题还是不太清楚发送的数据有没有问题

For i As Int32 = 0 To testDataSet.Tables("wait_message").Rows.Count - 1

MobPort.Text = testDataSet.Tables("wait_message").Rows(i).Item("uportnum")
TelNum_Text.Text = testDataSet.Tables("wait_message").Rows(i).Item("uphonenum")
'DeleteSms_Index.Text = testDataSet.Tables("wait_message").Rows(i).Item("ucontent") '此行是主鍵值,所以不打算顯示
SendSms_Text.Text = testDataSet.Tables("wait_message").Rows(i).Item("ucontent")
ReceiveSms_Text.Text = testDataSet.Tables("wait_message").Rows(i).Item("uIndex")
DeleteSms_Index.Text = testDataSet.Tables("wait_message").Rows(i).Item("ustatus")
'MsgBox(testDataSet.Tables("wait_message").Rows.Count - 1)
'MsgBox(MobPort.Text & testDataSet.Tables("wait_message").Rows(i).Item("uportnum"))
' MsgBox(i)
Next

Catch ex As Exception
MsgBox(ex.Message)
End Try


System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.Default
If Len(Trim(TelNum_Text.Text)) >= 11 And Sms_Send(Trim(TelNum_Text.Text), Trim(SendSms_Text.Text)) Then
Sms_Disconnection_Button.Enabled = False
MsgBox("发送短信成功!", MsgBoxStyle.Information, "提示")
'Else
' MsgBox("发送短信失败!", MsgBoxStyle.Critical, "警告")
System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.Default


Dim comstr = " UPDATE wait_message SET ustatus = '1' WHERE ustatus = '-1' "
Dim testDataSet As DataSet = setDataSet(comstr, conn1)


End If


Timer2.Enabled = False


End Sub

Private Function setDataSet(ByVal conStr$) As DataSet

Dim str2 As String = "server=localhost;database=test;user id=root;password=123;pooling=false;"
Dim conn1 As MySqlConnection = New MySqlConnection(str2)
conn1.Open()
Dim adapter1 As Common.DbDataAdapter = New MySqlDataAdapter(conStr, conn1)
Dim tmpDataSet As DataSet = New DataSet
adapter1.Fill(tmpDataSet, "wait_message")
Return tmpDataSet
conn1.Close()
End Function
注:以上代码未经过测试
dmzhjg 2011-11-08
  • 打赏
  • 举报
回复
我自己写的话会报未将对象引用设置到对象的实例
dmzhjg 2011-11-08
  • 打赏
  • 举报
回复
发送消息那个该怎么传参数啊?谢谢了
dmzhjg 2011-11-08
  • 打赏
  • 举报
回复
谢谢,主要是我学得不是很熟,写在public里就是全局变量了对吗.那个美元符号我都忘了.

16,555

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧