Entity SQL Datetime Синтаксическая ошибка - PullRequest
1 голос
/ 20 февраля 2011

Кто-нибудь знает, что здесь с моим синтаксисом? Я делаю динамические запросы eSQL и сталкиваюсь с ошибкой при попытке сделать условие для типа данных DateTime. Это ошибка:

Синтаксис запроса недействителен. Ближайший термин «2011», строка 1, столбец 135.

Если это имеет значение, то тип DateTime в моей сущности фактически обнуляется DateTime?

Однако я думал, что это правильный синтаксис из всего, что я прочитал.

Вот код:

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'" }
        };

Где EntityFilter:

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

И я создаю динамические запросы так:

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(); 

Ответы [ 2 ]

0 голосов
/ 20 февраля 2011

Это на самом деле правильный синтаксис для сущности SQL (отличается от обычного SQL или T-SQL).

Оказывается, проблема заключалась в слишком большом количестве одинарных кавычек, потому что они были у меня как в объекте EntityFilter, так и в методе, который создал динамический запрос.

0 голосов
/ 20 февраля 2011

в соответствии с вашим кодом, конец вашего оператора SQL будет производить что-то вроде

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

, при выполнении вы получите ошибку

Ошибка 102:Неверный синтаксис рядом с '2011'.

очевидно, что это не синтаксически правильный SQL, быстрое решение проблемы, которое должно быть в вашей коллекции фильтров:

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"
    }
};
...