【问题标题】:Why won't my SMS app write to a SQL Server database?为什么我的 SMS 应用程序不会写入 SQL Server 数据库?
【发布时间】:2014-05-29 15:18:16
【问题描述】:

我正在构建一个 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());
    }
}

【问题讨论】:

  • 错误很明显,对那个类实现tostring
  • SmsDeliverPdu 这是一种类型吗?
  • 似乎最后一个函数是从您的代码github.com/welly87/GSMComm/blob/master/PDUConverter/… 中的某处调用的
  • SmsDeliverPdu 是第三方库中的一个类,我已将代码重构为 message.data.Tostring() 但仍然出现相同的错误

标签: c# sql collections iteration


【解决方案1】:

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

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

【讨论】:

  • 这似乎奏效了,但现在我从 SQLcommand 收到一个错误,说 t 附近的语法不正确?
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2011-09-15
    • 1970-01-01
    • 2016-03-14
    • 2021-05-21
    • 1970-01-01
    • 1970-01-01
    • 2017-05-03
    • 2012-12-25
    • 1970-01-01
    相关资源
    最近更新 更多