Meilleure façon de passer une requête SQL autre qu'une procédure stockée

Je travaille sur une application console C # qui exécute deux requêtes SQL qui sont transmises comme des strings comme suit

private DataTable GetData(ssortingng resultsQuery) { SqlCommand sqlCmd = new SqlCommand(resultsQuery, sqlcon); DataTable dtlist = new DataTable(); SqlDataAdapter dalist = new SqlDataAdapter(); dalist.SelectCommand = sqlCmd; dalist.Fill(dtlist); sqlcon.Close(); return dtlist; } 

mais le problème est que ces requêtes changent très fréquemment et à chaque fois qu'elles changent, j'ai reconstruit, republié et désinstallé l'ancienne application avant d'installer l'application mise à jour qui, à mon avis, est une mauvaise pratique. La raison pour laquelle je ne peux pas utiliser une procédure stockée est que j'ai seulement access en lecture à la database et je ne peux pas créer une procédure stockée.

Quelqu'un peut-il me suggérer un meilleur moyen et une meilleure pratique pour faire face à cela?

Essentiellement, votre requête fait partie de la configuration de votre programme, qui est actuellement codée en dur. Par conséquent, une solution dont vous avez besoin a peu à voir avec l'access aux bases de données: vous avez besoin d'un moyen de mettre à niveau les parameters de configuration d'une application installée.

Bien qu'ayant une procédure stockée serait un bon choix, il existe d'autres façons d'get l'effet que vous searchz:

Une approche consiste à configurer une database distincte à laquelle vous avez un access en écriture et à l'utiliser comme source de strings de requête. Créez une table qui "mappe" les noms de requête sur le contenu de la requête:

 QueryKey Query -------- -------------------------------------- query1 SELECT A, B, C FROM MyTable1 WHERE ... queryX SELECT X, Y, Z FROM MyTable2 WHERE ... 

Votre programme peut lire cette autre database au démarrage et stocker les requêtes à utiliser lors de l'exécution. Lorsque les users finaux requestnt leurs données, votre programme exécute la requête obtenue à partir de la database de configuration par rapport à votre database en lecture seule.

Vous pouvez prendre d'autres approches pour dissortingbuer cette partie de la configuration. Les alternatives incluent le stockage des strings dans un dossier partagé sur un server de files auquel votre application a access, la configuration de votre propre service réseau pour alimenter vos requêtes au démarrage ou l'utilisation de moyens de configuration embeddeds disponibles dans. NET. La dernière approche vous oblige à modifier les parameters de chaque machine une à une, ce qui peut ne pas être un scénario de deployment idéal.

L'idée d'utiliser un file XML externe a été mentionnée, mais comme il s'agit de .Net, c'est exactement ce que les files App.Config sont destinés à faire. Il y a une bibliothèque de classs entière conçue pour vous permettre de stocker des informations dans le file App.Config afin qu'il puisse être facilement modifié sans recomstackr le programme. La grande mise en garde est que si la requête returnne un jeu de résultats entièrement différent, cela n'aidera pas beaucoup. Mais si tout ce que vous changez est la condition WHERE ou quelque chose comme ça, mais pas la list SELECT; alors cette approche fonctionnera bien.