У меня есть консольное приложение C# «App1», которое считывает строку данных из таблицы в базе данных SQL Server 2005. Я хочу, чтобы App1 передавал все данные в этой строке App2, другому консольному приложению C#. Как лучше всего это сделать?
Моя первая (наивная) попытка заключалась в следующем:
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 через командную строку?
Ваше здоровье!





Подход с разделением пробелами подходит, если вы используете Process.Start - вам просто нужно заключить элементы, содержащие пробелы, в кавычки - так же, как в командной строке: cd "c: \ program files"
Если данные более сложные, чем несколько значений, тогда могут помочь подходы IPC, такие как удаленное взаимодействие, сокеты, WCF и т. д. Или проще: запишите данные (возможно, как xml) в файл, а второе приложение загрузит данные из файла.
Один из подходов - сериализовать строку в XML и использовать его, за исключением того, что DataRow (без конструктора по умолчанию) не может быть сериализован. Вместо этого вам придется создать новый DataTable и добавить к нему эту строку.
Затем вы можете просто сериализовать весь DataTable в XML и передать его другому приложению либо в качестве аргумента командной строки, либо путем сохранения XML в файл и передачи имени файла.
Сериализация DataTable в XML довольно тривиальна благодаря методу DataTable.WriteXml.
Вы можете использовать сериализованный DataSet, чтобы легко переносить данные из одного места в другое без необходимости писать много настраиваемого кода, поскольку DataSet по умолчанию уже предоставляет необходимые методы (.WriteXML, например, сериализует DataSet в XML и записывает в файл). Ваше другое приложение может затем опросить соответствующий каталог на предмет новых файлов.