任何人都知道我的语法有什么问题吗?我正在尝试动态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();
答案 0 :(得分:0)
根据你的代码,你的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"
}
};
答案 1 :(得分:0)
它实际上是实体SQL的正确语法(与常规SQL或T-SQL不同)。
原来问题是单引号太多,因为我在EntityFilter对象和构建动态查询的方法中都有它们。