2008-10-06 5 views
3

J'ai une application de console C# "App1" qui lit une ligne de données d'une table dans une base de données SQL Server 2005. Je souhaite que App1 transmette toutes les données de cette ligne à App2, une autre application de console C#. Quelle est la meilleure façon de procéder?Quelle est la meilleure façon de passer une "rangée de données" d'une application console C# à une autre application console C#?

Ma première (naïve) tentative de le faire:

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. 

Cela a quelques défauts: si l'une des entrées de la ligne était « mon var » au lieu de « myVar »? En outre, l'ordre des éléments serait codé en dur dans l'application réceptrice (App2).

Alors, quelle est la meilleure façon de le faire? Serait-il approprié de passer une chaîne XML à App2 via la ligne de commande?

À la votre!

Répondre

3

Une approche consisterait à sérialiser la ligne en XML et à l'utiliser, sauf que DataRow (dépourvu de constructeur par défaut) ne peut pas être sérialisé. Au lieu de cela, vous devez créer un nouveau DataTable et lui ajouter cette ligne.

Ensuite, vous pouvez simplement sérialiser l'intégralité du DataTable en XML et le passer à l'autre application, soit en tant qu'argument de ligne de commande, soit en enregistrant le fichier XML dans un fichier et en transmettant le nom du fichier.

La sérialisation d'un DataTable en XML est assez triviale grâce à la méthode DataTable.WriteXml.

1

L'approche séparés par des espaces est très bien si vous utilisez Process.Start - vous avez juste besoin d'emballer des articles contenant des espaces avec des citations - même que sur la ligne de commande: cd « c: \ program files »

Si les données sont plus complexes que quelques valeurs, alors les approches IPC telles que l'accès distant, les sockets, WCF, etc pourraient aider. Ou plus simple: écrivez les données (peut-être en tant que xml) dans un fichier, et demandez à la deuxième application de charger les données du fichier.

1

Vous pouvez utiliser un DataSet sérialisé pour transférer facilement les données d'un endroit à un autre sans avoir à écrire beaucoup de code personnalisé, car DataSet par défaut fournit déjà les méthodes nécessaires (.WriteXML par exemple sérialisera le DataSet en XML et écrire dans un fichier). Votre autre application pourrait alors interroger le répertoire approprié pour de nouveaux fichiers.

Questions connexes