' WITHOUT_ARRAY_WRAPPER'附近的语法不正确。 C#

时间:2017-02-27 12:49:39

标签: c# sql .net sql-server-2016

我有像这样的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#代码时它会出现异常。

1 个答案:

答案 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节省了很多麻烦。