Question

Quelqu'un sache ce qui ne va pas avec ma syntaxe ici?Je fais des requêtes ESQL dynamiques et heurtez une erreur lors de la tentative d'emplacement de la condition pour le type de données DateTime.C'est l'erreur:

La syntaxe de la requête n'est pas valide.Près du terme '2011', ligne 1, colonne 135.

Si cela compte le type DateTime dans mon entité est réellement nullable DateTime?

Cependant, je pensais que c'est la syntaxe correcte de tout ce que j'ai lu.

Voici le code:

List<EntityFilter<FirstRead>> filters = new List<EntityFilter<FirstRead>>()
        {
            new EntityFilter<StudyFirstRead> { PropertyName = "username", OpType = ExpressionType.Equal, Value = "cwoodhouse" },
            new EntityFilter<StudyFirstRead> { PropertyName = "FirstRead", OpType = ExpressionType.LessThan, Value = "DATETIME'2011-02-01 00:00'" }
        };

où l'entitéfilter est:

  public class EntityFilter<T>
{
    public string PropertyName { get; set; }
    public ExpressionType OpType { get; set; }
    public object Value { get; set; }

Et je construis des requêtes dynamiques comme:

StringBuilder builder = new StringBuilder();

        int counter = 0;

        string baseStr = @"SELECT VALUE val FROM " + contextName + "." + tableName + " AS val WHERE val.";

        builder.Append(baseStr); 

        foreach (EntityFilter<T> filter in filters)
        {
            //builder.Append(filter.PropertyName + " " + filter.OpTypeString() + " @p" + counter);
            builder.Append(filter.PropertyName + " " + filter.OpTypeString() + "'" + filter.Value + "'"); 
            counter++;

            if (counter < filters.Count)
                builder.Append(" AND val."); 
            else
            {
                break; 
            }
        }

        return builder.ToString(); 

Était-ce utile?

La solution

It actually is the correct syntax for entity SQL (different than regular SQL or T-SQL).

Turns out the problem was too many single quotes, because I had them in both the EntityFilter object and the method that built the dynamic query.

Autres conseils

according to you code the end of your SQL statement would produce something like

AND val.FirstRead = 'DATETIME'2011-02-01 00:00''

when executed you will get error

Error 102: Incorrect syntax near '2011'.

obviously that is not syntactically correct SQL, the quick fix whould be to have your filters collection as such:

List<EntityFilter<FirstRead>> filters = new List<EntityFilter<FirstRead>>() {
    new EntityFilter<StudyFirstRead> {
        PropertyName = "username",
        OpType = ExpressionType.Equal,
        Value = "cwoodhouse"
    }, new EntityFilter<StudyFirstRead> {
        PropertyName = "FirstRead",
        OpType = ExpressionType.LessThan,
        Value = "2011-02-01 00:00"
    }
};
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top