Приложение сохраняет результаты хранимой процедуры 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();
}
}
}
Обдумывая эту реализацию, я считаю, что это можно каким-то образом включить через строку времени начала и окончания.
Я все еще думаю о правильном названии для этого вопроса.
Это правильно. Как только метка времени будет добавлена в имя файла, мне не придется беспокоиться о больших отдельных файлах. Однако я собираюсь иметь учетную запись для многих файлов, сохраняемых с течением времени.





Похоже, вы хотите сохранить некоторые метаданные вместе с необработанными данными 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();
Спасибо за отзыв, я опубликую свое решение, как только оно будет соответствовать критериям
Подумайте, что это просто простое использование текущего форматирования даты.
fileName = tableName + "_" + DateTime.Today.ToString("yyyyMMddHHmmss") + ".csv";
где формат - это все, что вам нужно - дата, время, отметки и т. д. - все, что вам нужно, чтобы получить желаемую детализацию. Вы можете перейти к строке формата «o», чтобы сократить ее до десятичных долей секунды, если вам нужно.
Спасибо за отзыв, Том. Просто попробовал эту реализацию, но не повезло. Я отправлю свое решение, как только найду его
@GonzoNick Я должен неправильно понять, что вы пытаетесь - возможно, если вы дадите образец того, что вам нужно, будет легче. Код, который я опубликовал, я использовал много раз раньше.
Вы поняли мою цель, по какой-то причине эта реализация не работает. Я пробовал следующее fileName = tableName + «"+ DateTime.Today.ToString (" yyyy: MM: dd: HH: mm: ss ") +" .csv "; и fileName = tableName +"» + DateTime.Now.ToString («yyyy: MM: dd: HH: mm: ss») + «.csv»;
Также упоминается stackoverflow.com/questions/12500091/…, однако результат по-прежнему остается liqTemp.csv
Вы уверены, что он действительно выполняет эту строку кода или использует эту переменную при создании модуля записи? Насколько я понимаю, оба ваших примера потерпят неудачу, поскольку вы встроили символ кавычки в имя файла 5e. Я бы проверил вашу последовательность сборки. Либо этого, либо логической ошибки я не вижу. Попробуйте переместить поток create за пределы цикла, поскольку его там больше не должно быть.
Так вы говорите, что эта строка
fileName = tableName + "_" + (++fileCount).ToString() + ".csv";должна содержать метку времени вместо количества файлов или что-то в этом роде?