我有像这样的SQL查询
SELECT * FROM vm.tablename WHERE DeviceId = 3 FOR JSON PATH,WITHOUT_ARRAY_WRAPPER;
我正在尝试从c#应用程序执行此SQL查询,如此
using (var dataContext = new DataContext(_connectionString)){
var query = new StringBuilder("SELECT * FROM vm.tablename");
query.Append(" WHERE DeviceId = ");
query.Append(deviceId);
query.Append("FOR JSON PATH,WITHOUT_ARRAY_WRAPPER");
Debug.WriteLine(query);
List<string> = dataContext.ExecuteQuery<string>(query.ToString()).ToList();
}
我在行ExecuteQuery上遇到异常:&#39;不正确的语法靠近&#39; WITHOUT_ARRAY_WRAPPER&#39;。&#39;。 在输出窗口中,我得到如下查询:&#39; SELECT * FROM vm.tablename WHERE DeviceId = 3 FOR JSON PATH,WITHOUT_ARRAY_WRAPPER&#39;当我在sql server mgmt studio中运行它时工作正常但是,当我运行c#代码时它会出现异常。
答案 0 :(得分:1)
您收到错误的原因是:
new StringBuilder("SELECT * FROM vm.tablename");
query.Append(" WHERE DeviceId = ");
query.Append(deviceId);
query.Append("FOR JSON PATH,WITHOUT_ARRAY_WRAPPER");
结果如下:
SELECT * FROM vm.tablename WHERE DeviceId = :deviceIDFOR JSON PATH,WITHOUT_ARRAY_WRAPPER
在&#34; FOR&#34;之前增加一个空格。在你的最后一行。我建议使用接受字符串和解析间距的方法创建自定义QueryBuilder
类。&#34;。&#34;对你而言,它为动态SQL节省了很多麻烦。