为什么我的SMS应用程序不会写入SQL Server数据库?

时间:2014-05-29 15:18:16

标签: c# sql collections iteration

我以Windows服务的形式构建一个SMS应用程序,该服务侦听COM端口上的新消息,然后将消息写入SQL Server数据库。我正在使用名为GSMComm的第三方库来实现这一目标。

问题是当我遍历从GSM调制解调器获得的消息集合,然后尝试将它们放入数据库时​​,它会引发异常

  

System.NotImplementedException:SmsDeliverPdu.ToString()未实现。

有人可以帮忙吗?

private void SMSGetter()
{
    Log("Getter Fired");

    //var message = GSM.ReadMessage(4);
    //GSM.ReadMessage(4);
    //TcpClientChannel client = new TcpClientChannel();
    //ChannelServices.RegisterChannel(client, false);
    //string url = "192.168.100.67:2000";
    //ISmsSender smssender = (ISmsSender)Activator.GetObject(typeof(ISmsSender), url);

    try
    {
        DecodedShortMessage[] messages = Comm.ReadMessages(PhoneMessageStatus.All, PhoneStorageType.Sim);

        SqlConnection Conn = new SqlConnection("Data Source=*******;Initial Catalog=****;User ID=*****;Password=*************");

        SqlCommand com = new SqlCommand();
        com.Connection = Conn;

        Conn.Open();

        foreach (DecodedShortMessage message in messages)
        {
           com.CommandText = ("INSERT INTO SMSArchives(Message,Blacklist) VALUES ('" +message.Data + "', 'Yes')");
           com.ExecuteNonQuery();
           //com.CommandText = ("INSERT INTO SMSArchives(Message,Blacklist) VALUES (@par1,@par2)");
           //com.Parameters.AddWithValue("@par1", message.ToString());
           //com.Parameters.AddWithValue("@par2", "Yes");
           //com.ExecuteNonQuery();
        }

        Conn.Close();
        return;
    }
    catch (Exception ex)
    {
        Log(ex.ToString());
    }
}

2 个答案:

答案 0 :(得分:1)

message.Data返回SmsDeliverPdu,但没有ToString()实现,因此将message.Data连接到字符串将会失败。

您需要插入message.Data.UserDataText(或任何合适的内容)

答案 1 :(得分:0)

我猜测SmsDeliverPdu是你从某个地方下载的库吗?快速搜索并没有改变它。但是,在Visual Studio中自动创建方法时,错误消息通常是抛出的默认错误。如果您编写了执行此操作的类,则您无法返回并在ToString方法中编写任何代码。如果你从其他人那里得到了图书馆,他们就没有了。

顺便说一下,你应该真正研究一下参数化的查询。您的代码允许SQL注入。