ssis создать файл json удалить возврат - PullRequest
0 голосов
/ 06 января 2019

Я использую задачу сценария для создания файла JSON из SQL-запроса.

Код c # в задаче скрипта:

public void Main()
{
    // TODO: Add your code here

    ConnectionManager cm;
    string sqlString = "";

    System.IO.StreamWriter file = new System.IO.StreamWriter(@"f:\JSONOutput.txt");

    sqlString = "SELECT * FROM[dbo].[JJVCACUProductElectron] where id in (1,2,3) for json auto";
    System.Data.SqlClient.SqlConnection sqlConn;
    System.Data.SqlClient.SqlCommand sqlComm;

    cm = Dts.Connections["crm_vm_2017_cs_dotnet"];

    sqlConn = (System.Data.SqlClient.SqlConnection)cm.AcquireConnection(Dts.Transaction);
    sqlComm = new System.Data.SqlClient.SqlCommand(sqlString, sqlConn);
    System.Data.SqlClient.SqlDataReader reader = sqlComm.ExecuteReader();
    try
    {
while (reader.Read())
{

    file.WriteLine(reader[0]);
}
    }
    finally
    {
// Always call Close when done reading.
reader.Close();
    }

    cm.ReleaseConnection(sqlConn);
    Dts.TaskResult = (int)ScriptResults.Success;
}

Сгенерированный выходной файл является неполным, я думаю, что в некотором столбце, вероятно, есть возврат. Как убрать возвращаемые символы в выводе?

Ответы [ 2 ]

0 голосов
/ 08 января 2019

Рабочий код: кажется, что сервер sql при отправке данных из select ... для json auto автоматически выплевывает строки определенного размера. Но в конце строки нет криля. Таким образом, метод file.write может непрерывно объединять строки в одну большую строку в файле, которая является допустимым файлом json. В моем предыдущем коде использовался writeline, который, вероятно, добавлял crlf в конце каждой строки. Кроме того, ключом является использование (file), иначе можно увидеть, что выходной файл обрезан, что является проблемой в моем исходном посте.

        public void Main()
        {
            ConnectionManager cm;

            using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"e:\jsontest"))
            {
                System.Data.SqlClient.SqlConnection sqlConn;
                System.Data.SqlClient.SqlCommand sqlComm;

                cm = Dts.Connections["crm_vm_2017_cs_dotnet"];

                sqlConn = (System.Data.SqlClient.SqlConnection)cm.AcquireConnection(Dts.Transaction);
                sqlComm = new System.Data.SqlClient.SqlCommand("select * from JJVCProduct for json auto", sqlConn);
                System.Data.SqlClient.SqlDataReader reader = sqlComm.ExecuteReader();
                System.Text.StringBuilder sb = new System.Text.StringBuilder();
                try
                {
                    while (reader.Read())
                    {
                        file.Write(reader.GetValue(0).ToString());
                    }

                }
                finally
                {
                    reader.Close();
                }

                cm.ReleaseConnection(sqlConn);
                Dts.TaskResult = (int)ScriptResults.Success;
            }


        }
0 голосов
/ 06 января 2019

Обход

Вы можете удалить часть for json auto из команды SQL и импортировать данные в DataTable, а затем экспортировать DataTable в файл Json.

Импорт данных в таблицу данных

Экспорт DataTable в файл Json

...