【问题标题】:What's the best way to pass a "row of data" from one C# console app to another C# console app?将“数据行”从一个 C# 控制台应用程序传递到另一个 C# 控制台应用程序的最佳方法是什么?
【发布时间】:2008-10-06 23:06:36
【问题描述】:

我有一个 C# 控制台应用程序“App1”,它从 SQL Server 2005 数据库中的表中读取一行数据。我希望 App1 将这一行中的所有数据传递给另一个 C# 控制台应用程序 App2。最好的方法是什么?

我的第一次(天真的)尝试是这样做的:

object[] o = myrow.ItemArray;
// make a string that separates each item by a space... for example "1 2 myVar".
// pass this string to App2 via command line.

这有一些缺陷:如果行中的条目之一是“my var”而不是“myVar”怎么办?此外,项目的顺序将在接收应用程序 (App2) 中进行硬编码。

那么最好的方法是什么?通过命令行将 xml 字符串传递给 App2 是否合适?

干杯!

【问题讨论】:

    标签: c# sql console


    【解决方案1】:

    一种方法是将行序列化为 XML 并使用它,但不能序列化 DataRow(缺少默认构造函数)。相反,您必须创建一个新的 DataTable 并将该行添加到其中。

    然后您可以简单地将整个 DataTable 序列化为 XML 并将其作为命令行参数或将 XML 保存到文件并传递文件名传递给其他应用程序。

    借助DataTable.WriteXml 方法,将DataTable 序列化为XML 非常简单。

    【讨论】:

      【解决方案2】:

      如果您使用的是 Process.Start,则空格分隔的方法很好 - 您只需将包含空格的项目用引号括起来 - 与命令行相同:cd "c:\program files"

      如果数据比几个值更复杂,那么 IPC 方法(如远程处理、套接字、WCF 等)可能会有所帮助。或者更简单:将数据(可能是 xml)写入文件,然后让第二个应用从文件中加载数据。

      【讨论】:

        【解决方案3】:

        您可以使用序列化 DataSet 轻松地将数据从一个地方获取到另一个地方,而无需编写大量自定义代码,因为默认 DataSet 已经提供了必要的方法(例如 .WriteXML 会将 DataSet 序列化为 XML 和写入文件)。然后,您的其他应用程序可以轮询相应目录以查找新文件。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-03-16
          • 1970-01-01
          • 2013-09-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多