【问题标题】:Best practice to parse a comma separated string with C# and SQL Server使用 C# 和 SQL Server 解析逗号分隔字符串的最佳实践
【发布时间】:2014-09-24 09:55:27
【问题描述】:

我有一个 SMS 机器,每次收到消息时,它都会向填充 SQL Server 数据库表的页面发送 POST。 消息的正文是这样的:

#MessageType#Variable1:Value1,Variable2:Value2,Variable3:Value3

现在我有了消息文本,我必须对其进行解析以获取值并填充另一个表。 解析消息的最佳实践是什么?直接在 SMS Machine POST 的代码隐藏中?在带有触发器的 SQL Server 中?

考虑到我将在同一台 SMS 机器上收到许多具有不同变量的消息类型

【问题讨论】:

  • 你的结构比较严格,所以我个人会使用正则表达式。

标签: c# sql sql-server parsing csv


【解决方案1】:

通常是为了避免给数据库服务器带来比它已经拥有的更多的负载(我见过一些情况并非如此,但通常情况下确实如此)。

因此,在插入时(因此在处理 POST 的服务器的位置)直接执行类似的操作(格式化要插入到 sql 服务器的文本)几乎总是更好。

在您的情况下,您有 2 个选项可用于将文本转换为适合您的数据库的值:

  • 正则表达式
  • 2 个组合拆分(一个用于 ,一个用于 :)

通常首选正则表达式,除非程序员对正则表达式不是很有经验,那么通常会在那里使用第二种方法(如果你不习惯它们,正则表达式可能会很麻烦)

【讨论】:

  • 我认为我属于第二类。通常对于这样的任务,我会在子字符串之后使用if (messageText.StartsWith("#MessageType1#")) { ... } else if (messageText.StartsWith("#MessageType2#")) { ... } else if (messagetext.StartsWith("MessageType3#")) { ... } 检查消息类型以仅获取值并进行一些拆分以获取值。现在我想做一些更“专业”的事情。
  • 就我个人而言,我也更喜欢 NON 正则表达式变体,因为它一目了然更容易阅读,但性能方面的正则表达式通常是更好的变体,而且正则表达式通常被视为最佳实践变体。
  • 您好,对于这种情况,我学习了如何根据需要编写正则表达式,并使用 SQL# 来匹配收到的消息,并根据匹配的正则表达式运行一个存储过程来进行插入在另一个表中。
猜你喜欢
  • 2021-11-01
  • 1970-01-01
  • 2011-02-20
  • 1970-01-01
  • 2010-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多