2015-06-09 3 views
0

Я создаю простое приложение для отправки сообщения с использованием библиотеки gsmcomm и C#. когда я отправил сообщение через модем, я хранил его в базе данных оракула SENTMESSAGE стол. Я предоставляю таблицу при отправке сообщения, а не FAILEDMESSAGE таблица (ID, DATE, TIME, PHONENUMBER, MESSAGE), но я все еще не понимаю, как это реализовано.Как проверить успешное и неудачное отправление сообщения в библиотеке gsmcomm

Кто-нибудь может предложить мне, как различать отправку сообщения с успехом и неудачу в библиотеке gsmcomm?

это мой код для отправки сообщения:

private void btnSentSMS_Click(object sender, EventArgs e) 
{ 
    var msg = txtMessage.Text; 
    var phoneNumber = txtNumber.Text; 
    var pdu = new SmsSubmitPdu(msg, phoneNumber, string.Empty); 
    comm.SendMessage(pdu); 
    MessageBox.Show("sms sent"); 

    //STORE SEND SMS TO DATABASE 
    OracleCommand cmd = new OracleCommand(); 
    cmd.CommandText = @"INSERT INTO SENTMESSAGE (ID, DATE, TIME, PHONENUMBER, MESSAGE) VALUES 
         (SQ_SENTMESSAGE.NEXTVAL, '" + DateTime.Now + "', TO_DATE('" + DateTime.Now + "', 'dd/MM/yyyy hh24:mi:ss'), '" 
         + phoneNumber + "', '" + msg + "')"; 
    cmd.Connection = koneksi_manual.con; 
    koneksi_manual.con.Open();// <= Open connection before executing the command. 
    cmd.ExecuteNonQuery(); 
    koneksi_manual.con.Close(); //closing connection 
} 
+0

Ваш вопрос непонятен, но вы всегда должны использовать [параметризованные запросы] (http://blog.codinghorror.com/give-me-parameterized-sql-or-give-me-death/). Этот тип конкатенаций строк открыт для [SQL Injection] (http://en.wikipedia.org/wiki/SQL_injection) атак. И используйте инструкцию 'using' для размещения ваших соединений и команд. –

+0

по мне это понятно, .. я просто хочу отправить сообщение с помощью библиотеки gsmcomm и сохранить его в базе данных, .... что с этим не так? – aminvincent

ответ

0

SemdMessage метод как:

public bool SendMessage(SerialPort port, string phoneNo, string message) 
    { 
     bool isSend = false; 
     try 
     {     
      string recievedData = SendATCommand(port,"AT", 300, "No phone connected"); 
      string command = "AT+CMGF=1" + char.ConvertFromUtf32(13); 
      recievedData = SendATCommand(port,command, 300, "Failed to set message format."); 

      // AT Command Syntax - http://www.smssolutions.net/tutorials/gsm/sendsmsat/ 
      command = "AT+CMGS=\"" + phoneNo + "\"" + char.ConvertFromUtf32(13); 
      recievedData = SendATCommand(port, command, 300, 
       "Failed to accept phoneNo"); 

      command = message + char.ConvertFromUtf32(26); 
      recievedData = SendATCommand(port, command, 3000, 
       "Failed to send message"); //3 seconds 

      if (recievedData.EndsWith("\r\nOK\r\n")) 
       isSend = true; 
      else if (recievedData.Contains("ERROR")) 
       isSend = false; 

      return isSend; 
     } 
     catch (Exception ex) 
     { 
      throw ex; 
     }   
    } 
+0

это означает, что я меняю метод 'comm.SendMessage (pdu);' как метод выше, чтобы он мог реализовать IF логически как 'if (comm.SendMessage (pdu))' ?? – aminvincent

+0

как написать bool метод i показать u. – Aks

+0

спасибо за предложение – aminvincent

0

Пожалуйста, попробуйте этот код:

private void btnSentSMS_Click(object sender, EventArgs e) 
{ 
    var msg = txtMessage.Text; 
    var phoneNumber = txtNumber.Text; 
    var pdu = new SmsSubmitPdu(msg, phoneNumber, string.Empty); 
    if(comm.SendMessage(pdu)) 
    { 
     MessageBox.Show("sms sent"); 

     //STORE SEND SMS TO DATABASE 
     OracleCommand cmd = new OracleCommand(); 
     cmd.CommandText = @"INSERT INTO SENTMESSAGE (ID, DATE, TIME, PHONENUMBER, MESSAGE) VALUES 
        (SQ_SENTMESSAGE.NEXTVAL, '" + DateTime.Now + "', TO_DATE('" + DateTime.Now + "', 'dd/MM/yyyy hh24:mi:ss'), '" 
        + phoneNumber + "', '" + msg + "')"; 
cmd.Connection = koneksi_manual.con; 
koneksi_manual.con.Open();// <= Open connection before executing the command. 
cmd.ExecuteNonQuery(); 
koneksi_manual.con.Close(); //closing connection 
} 
else 
{ 
MessageBox.Show("sms not sent"); 
OracleCommand cmd = new OracleCommand(); 
cmd.CommandText = @"INSERT INTO FAILEDMESSAGE (ID, DATE, TIME, PHONENUMBER, MESSAGE) VALUES 
        (SQ_SENTMESSAGE.NEXTVAL, '" + DateTime.Now + "', TO_DATE('" + DateTime.Now + "', 'dd/MM/yyyy hh24:mi:ss'), '" 
        + phoneNumber + "', '" + msg + "')"; 
      cmd.Connection = koneksi_manual.con; 
     koneksi_manual.con.Open();// <= Open connection before executing the command. 
cmd.ExecuteNonQuery(); 
koneksi_manual.con.Close(); //closing connection 
} 
} 
+0

Когда я использовал, если (comm.SendMessage (pdu)), мой Visual Studi получил ошибку, подобную этой «Невозможно неявно преобразовать тип« void »в« bool », это означает, что метод не может преобразовать в bool ..... любые подсказывают, как решить это? – aminvincent

Смежные вопросы