我尝试使用AT命令发送许多或批量短信。我尝试在datagrid中发送所有数字,但只发送第一个数字。
这是我的代码
Dim sql As New MySqlDataAdapter("select StudentID, StudentName,StudentContact, DueDate FROM issue inner join student on student.StudentID = issue.Student ", conn)
Dim ds As New DataSet
sql.Fill(ds, 0)
For i As Integer = 0 To ds.Tables(0).Rows.Count - 1
Dim wholenum As String
Dim wholesms As String
wholenum = ds.Tables(0).Rows(i).Item(2).ToString
wholesms = "Hello " & ds.Tables(0).Rows(i).Item(1).ToString & ", this is your Due Date " & ds.Tables(0).Rows(i).Item(3).ToString & " pls return it on your due date"
If SerialPort1.IsOpen Then
Try
With SerialPort1
.Write("AT" & vbCrLf)
.Write("AT+CMGF=1" & vbCrLf)
.Write("AT+CMGS=" & Chr(34) & wholenum & Chr(34) & vbCrLf)
.Write(wholesms & Chr(26))
MsgBox("Success sa SEND")
'update one
'Call ConnectDatabase()
'com = New MySqlCommand("UPDATE issue SET Sent='1' ", conn)
'com.ExecuteNonQuery()
'Call DisconnectDatabase()
End With
Catch ex As Exception
MsgBox("Bad Signal or No load")
End Try
Else
MsgBox("Pls insert a modem")
End If
我认为循环正在工作,因为它在数据网格视图中包含了多少内部的成功消息。但它只发送第一个数字。
答案 0 :(得分:0)
您需要显着修复AT命令处理。首先,您需要读取并解析调制解调器在发送AT命令行后发送给您的所有内容(顺便说一句,应该只使用"\r"
而不是vbCrLf终止)。 / p>
在收到最终结果代码之前,您永远不应该开始发送新的命令行。对AT+CMGS
而言,您应该在收到"\r\n >"
前缀之前永远不要发送短信有效负载。
this和this回答涵盖了这些问题。但您应该首先阅读V.250 specification第5章中的所有文本。使用AT命令时,它是really important document。