2011-08-25 2 views
0

J'ai quelques chaînes de connexion et requêtes que je dois stocker en dehors de mon programme C# (impossible de les coder en dur). En ce moment j'utilise le fichier de configuration d'application de Visual Studio. Malheureusement, les requêtes nécessitent des variables (choisies lors de l'exécution par l'utilisateur) de mon programme à exécuter.Meilleure façon de stocker les requêtes hors programme en C#

Ma solution de contournement actuelle consiste à découper la requête en morceaux dans le fichier de configuration et à les réassembler dans le programme. Je préfère éviter cela, car il est difficile de lire la requête à partir du fichier de configuration. Est-ce que quelqu'un a une solution plus élégante?

+1

pourquoi ne pas utiliser les procédures stockées? – Jethro

Répondre

6

Stored procedures sur le serveur qui accepte les paramètres serait ma préférence. Cela vous protège assez bien de sql injection (sauf si vous les construisez incorrectement), et c'est la meilleure pratique communément acceptée.

Sinon, utilisez les requêtes parameterized. Ils peuvent être stockés dans le fichier de configuration. (Mais je serais sacrément sûr d'encrypt the .config fichier si vous continuez à stocker des données sensibles comme les chaînes de connexion et des choses utiles comme des requêtes réalisables dans un fichier de configuration texte brut.)

+0

mes pensées exactes. Joli. +1 – Jethro

+0

+1 pour les procédures stockées. Meilleure pratique de sécurité sage et c'est aussi une solution élégante à ce problème. – Michael

+0

En outre, regardez dans un mapper O/R comme Entity Framework ou NHibernate - c'est légèrement orthogonal à votre question, mais il porte sur elle. –

1

Une approche courante consiste à utiliser des espaces réservés et à les remplacer au moment de l'exécution.

1

Si vous devez avoir des chaînes de votre programme et ne peut pas utiliser des procédures stockées, la meilleure façon serait de chaîne de magasin avec déjà paramaters, quelque chose comme ceci:

select * from Pays où la ville = @city »

charge cette chaîne et ajouter un paramètre à votre requête Toujours utilise les paramètres sur la génération de la requête.

C'est une approche native native simple et directe qui me vient à l'esprit dans votre cas.

Espérons que cela aide.

Questions connexes