Генерация файлов JSON - PullRequest
       6

Генерация файлов JSON

0 голосов
/ 30 ноября 2018

Мне нужна помощь в создании файлов JSON из таблицы базы данных.Ниже приведен мой пример json, сгенерированный с помощью кода tsql (с использованием SQL Server 2017)

{  "TBLEMPLOYEES":[  
  {  
     "ID":1,
     "NAME":"SURESH",
     "SALARY":1000,
     "ADDRESS":{  
        "EMP_ADDRESS":"101 A ADDRESS1",
        "OTHERS":{  
           "EMP_PHONE":"987-654-4567",
           "EMP_CITY":"CITY1"
        }
     }
  },
  {  
     "ID":2,
     "NAME":"RAMESH",
     "SALARY":2000,
     "ADDRESS":{  
        "EMP_ADDRESS":"125 A ADDRESS2",
        "OTHERS":{  
           "EMP_PHONE":"588-654-4567",
           "EMP_CITY":"CITY2"
        }
     }
  }

]}

Ниже приведен код TSQL, который я использую для генерации вывода JSON в SSMS

SELECT ID AS "ID", EMP_NAME AS "NAME", EMP_SALARY AS "SALARY",EMP_ADDRESS  AS "ADDRESS.EMP_ADDRESS", EMP_PHONE AS "ADDRESS.OTHERS.EMP_PHONE", EMP_CITY AS "ADDRESS.OTHERS.EMP_CITY" FROM TBLEMPLOYEES FOR JSON path, root('TBLEMPLOYEES')

Теперь возникает проблема, когда я пытаюсь использовать тот же запрос из приложения winform, используя C # .net, я не получаю правильный формат файла Json.В нем нет данных.

Вот код, который я использую

var queryWithForJson = "SELECT ID AS \"ID\", EMP_NAME AS \"NAME\",  EMP_SALARY AS \"SALARY\",EMP_ADDRESS AS \"ADDRESS.EMP_ADDRESS\", EMP_PHONE AS \"ADDRESS.OTHERS.EMP_PHONE\", EMP_CITY AS \"ADDRESS.OTHERS.EMP_CITY\" FROM TBLEMPLOYEES FOR JSON PATH, ROOT('TBLEMPLOYEES')";

        string userName = System.Security.Principal.WindowsIdentity.GetCurrent().Name;

        var conn = new SqlConnection("Server=localhost\\SQLEXPRESS01;Database=Sample_2018;Trusted_Connection=True;");
        var cmd = new SqlCommand(queryWithForJson, conn);
        conn.Open();
        var jsonResult = new StringBuilder();
        var reader = cmd.ExecuteReader();
        if (!reader.HasRows)
        {
            jsonResult.Append("[]");
        }
        else
        {
            while (reader.Read())
            {
                jsonResult.Append(reader.GetValue(0).ToString());
            }
        }

        System.IO.StreamWriter file = new System.IO.StreamWriter(@"D:\Output\TestJson.json");
        file.WriteLine(jsonResult.ToString());

Пожалуйста, дайте мне знать правильную процедуру вывода данных JSON (с тем же форматом) из таблицы базы данных вфайл JSON.

1 Ответ

0 голосов
/ 30 ноября 2018

Это не проблема вашего запроса, потому что он возвращает тот же JSON, когда вы выполняете напрямую в SSMS или с помощью кода C #.

Основная причина, по которой вы не записываете свои данные в файл JSON.

Так что для этого нужно использовать StreamWriter.Flush();.как

System.IO.StreamWriter file = new System.IO.StreamWriter(@"D:\Output\TestJson.json");
file.WriteLine(xml.ToString());
file.Flush();       //<== This method write your buffered stream data to file.
file.Close();       //<== This method closes current stream.

StreamWriter.Flush () :

Очищает все буферы для текущего устройства записи и вызывает запись любых буферизованных данных в базовый поток.

Простыми словами, ваши буферизованные данные в потоке записываются методом Flush().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...