SQL存储过程到带时间戳的csv文件

时间:2018-08-10 05:53:57

标签: c# sql csv timestamp

应用程序将来自SQL存储过程的结果存储到给定的csv中。文件必须在文件名中包含时间戳。通过我的任何研究,我一直未能成功找到解决方案。这是代码,请记住,时间戳需要有日期,最重要的是时间'hh:ss'

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();
                }
            }
        }

通过此实现进行头脑风暴,我认为可以通过开始和结束时间字符串将其合并。

我仍然在考虑这个问题的标题。

2 个答案:

答案 0 :(得分:0)

似乎要与原始CSV数据一起存储一些元数据。某些文件类型取决于文件类型,具有大量的元数据属性,例如作者身份和公司名称等。因此,在这种情况下,我可能会选择使用令人惊叹的ClosedXML库以XSLX格式存储CSV数据。 XSLX文件类型具有许多元数据属性,可以存储您的时间戳等等。

下面是将属性添加到Docx文件的示例。这只是表明Microsoft Office格式具有许多可以访问和使用的可用元数据属性。
{{3}}

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();

答案 1 :(得分:0)

认为它只是当前日期格式的简单使用。

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

其中的格式是您需要的任何格式-日期,时间,刻度等-任何需要的粒度。如果需要,您可以转到formo字符串“ o”将其降至十进制的亚秒。