Mon mémoire est d'implémenter une interface qui a une méthode qui ressemble à quelque chose comme « GetValuesSqlStatement » ci-dessous:Quelle est la meilleure pratique pour interroger les dates dans SQL lorsque les requêtes paramétrées ne sont pas possibles
public string SqlPattern { get { ... } }
//this varies; eg. "SELECT name FROM someTable WHERE startDate < {0}"
public string DatabaseType { get { ... } }
//this varies; eg. "SqlServer"
public string GetValuesSqlStatement(List<object> paramValues)
{
//...desired logic here, using DatabaseType, SqlPattern and paramValues
}
maintenant, parce que cela Je dois produire une instruction SQL exécutable, je ne peux pas utiliser de paramètres dans l'exécution de la requête. Et l'interface que je dois mettre en œuvre est non négociable. Quelle est la meilleure façon de procéder pour s'assurer que les dates du résultat sont interprétées correctement par le moteur de recherche de la base de données? En supposant que les paramValues contiennent des objets .NET DateTime, comment devraient-ils être formatés en chaîne avant de se connecter à la chaîne de modèle SQL? Quel est le format de date universel le plus courant parmi les bases de données must? (par exemple quelque chose comme 'jj-mmm-aaaa'). NB: J'ai seulement vraiment besoin de m'inquiéter à propos de SQL Server à partir de 2005 et d'Oracle à partir de 10g. Donc le SQL doit être valide T SQL et PL SQL et signifie la même chose dans les deux versions.
Eh bien, j'ai la chaîne DatabaseType pour m'aider à construire cette requête. Si vous dites que 'aaaa-mm-jj' fonctionne pour tout sauf SQL Server que je peux utiliser la logique conditionnelle. Si 'aaaa-mon-dd' fonctionne à la fois dans SQL Server et Oracle, cela suffira bien sûr pour mes besoins, mais je ne pense pas que ce soit nécessairement une bonne pratique. – Lisa
@Lisa, vous devrez expérimenter. Je n'ai jamais de serveurs français, et j'utilise toujours AAAA-MM-JJ. Vous verrez dans l'article d'Aaron et cet article de connexion qu'il ne s'applique pas aux nouveaux types de données date et datetime2. dans SQL Server. Selon mon expérience dans Oracle, les littéraux requièrent toujours le qualificateur DATE pour les distinguer des chaînes. Vous avez probablement besoin d'envelopper votre génération de chaîne de date dans quelque chose qui est spécifique à la base de données. –
J'ai soudainement eu une meilleure idée, ce qui rend cette question peu utile. Je pourrais l'ajouter comme une troisième réponse, même si elle ne répond pas strictement à la question. – Lisa