Сохраненная процедура SQL в CSV-файл с отметкой времени

Приложение сохраняет результаты хранимой процедуры SQL в заданном CSV. Необходимо, чтобы в имени файла была отметка времени. Мне не удалось найти решение ни в одном из моих исследований. Вот код, имейте в виду, что метка времени должна содержать дату и, самое главное, время 'чч: сс'

string db = "databasename";
        string startTime = "2018-04-17 00:00:00.000";
        string endTime = "2018-04-17 23:59:59.997";
        string LiquorFile = "LiquorFile.csv";

        using (SqlConnection con = new SqlConnection(GlobalConfig.CnnString(db)))
        {
            var tableName = "liqTemp";
            var fileName = tableName + ".csv";
            var recordCount = 0;
            var fileCount = 0;

            SqlCommand scCmd = new SqlCommand("dbo.spGetInventory_Liquor", con);
            scCmd.CommandType = CommandType.StoredProcedure;
            SqlDataReader reader;

            con.Open();

            scCmd.Parameters.Add("@StartDate", SqlDbType.DateTime).Value = startTime;
            scCmd.Parameters.Add("@EndDate", SqlDbType.DateTime).Value = endTime;

            reader = scCmd.ExecuteReader();

            StreamWriter writer = null;

            try
            {
                while (reader.Read())
                {
                    if (writer == null || recordCount == 50000)
                    {
                        if (writer != null)
                        {
                            writer.Close();
                            writer.Dispose();
                        }
                        fileName = tableName + "_" + (++fileCount).ToString() + ".csv";

                        writer = new StreamWriter(fileName);
                    }
                    recordCount++;
                    writer.WriteLine("\t{0}\t{1}", reader.GetDecimal(0), reader.GetString(1));
                }
                reader.NextResult();
            }
            finally
            {
                if (writer != null)
                {
                    writer.Dispose();
                }
            }
        }

Обдумывая эту реализацию, я считаю, что это можно каким-то образом включить через строку времени начала и окончания.

Я все еще думаю о правильном названии для этого вопроса.

Так вы говорите, что эта строка fileName = tableName + "_" + (++fileCount).ToString() + ".csv"; должна содержать метку времени вместо количества файлов или что-то в этом роде?

TomC 10.08.2018 08:06

Это правильно. Как только метка времени будет добавлена ​​в имя файла, мне не придется беспокоиться о больших отдельных файлах. Однако я собираюсь иметь учетную запись для многих файлов, сохраняемых с течением времени.

Gonzo Nick 10.08.2018 08:59
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
2
163
2

Ответы 2

Похоже, вы хотите сохранить некоторые метаданные вместе с необработанными данными CSV. Некоторые типы файлов, в зависимости от типа файла, имеют множество свойств метаданных, таких как авторство, название компании и т. д. Итак, в этой ситуации я мог бы сохранить свои данные CSV в формате XSLX, используя замечательную библиотеку ClosedXML. Тип файла XSLX имеет множество свойств метаданных для хранения ваших временных меток и многое другое.

Ниже приведен пример добавления свойств в файл Docx. Это просто показывает, что форматы Microsoft Office имеют множество доступных свойств метаданных, к которым вы можете получить доступ и использовать. Как установить расширенные свойства файла?

using Microsoft.WindowsAPICodePack.Shell;
using Microsoft.WindowsAPICodePack.Shell.PropertySystem;

string filePath = @"C:\temp\example.docx";
var file = ShellFile.FromFilePath(filePath);

// Read and Write:

string[] oldAuthors = file.Properties.System.Author.Value;
string oldTitle = file.Properties.System.Title.Value;

file.Properties.System.Author.Value = new string[] { "Author #1", "Author #2" };
file.Properties.System.Title.Value = "Example Title";

// Alternate way to Write:

ShellPropertyWriter propertyWriter =  file.Properties.GetPropertyWriter();
propertyWriter.WriteProperty(SystemProperties.System.Author, new string[] { "Author" });
propertyWriter.Close();

Спасибо за отзыв, я опубликую свое решение, как только оно будет соответствовать критериям

Gonzo Nick 10.08.2018 09:07

Подумайте, что это просто простое использование текущего форматирования даты.

fileName = tableName + "_" + DateTime.Today.ToString("yyyyMMddHHmmss") + ".csv";

где формат - это все, что вам нужно - дата, время, отметки и т. д. - все, что вам нужно, чтобы получить желаемую детализацию. Вы можете перейти к строке формата «o», чтобы сократить ее до десятичных долей секунды, если вам нужно.

Спасибо за отзыв, Том. Просто попробовал эту реализацию, но не повезло. Я отправлю свое решение, как только найду его

Gonzo Nick 10.08.2018 11:01

@GonzoNick Я должен неправильно понять, что вы пытаетесь - возможно, если вы дадите образец того, что вам нужно, будет легче. Код, который я опубликовал, я использовал много раз раньше.

TomC 10.08.2018 11:46

Вы поняли мою цель, по какой-то причине эта реализация не работает. Я пробовал следующее fileName = tableName + «"+ DateTime.Today.ToString (" yyyy: MM: dd: HH: mm: ss ") +" .csv "; и fileName = tableName +"» + DateTime.Now.ToString («yyyy: MM: dd: HH: mm: ss») + «.csv»;

Gonzo Nick 11.08.2018 07:38

Также упоминается stackoverflow.com/questions/12500091/…, однако результат по-прежнему остается liqTemp.csv

Gonzo Nick 11.08.2018 07:47

Вы уверены, что он действительно выполняет эту строку кода или использует эту переменную при создании модуля записи? Насколько я понимаю, оба ваших примера потерпят неудачу, поскольку вы встроили символ кавычки в имя файла 5e. Я бы проверил вашу последовательность сборки. Либо этого, либо логической ошибки я не вижу. Попробуйте переместить поток create за пределы цикла, поскольку его там больше не должно быть.

TomC 12.08.2018 01:03

Другие вопросы по теме