将文本文件作为BLOB存储在Oracle DB中会切断文件的结尾

时间:2019-03-22 21:46:17

标签: c# arrays asp.net-mvc oracle entity-framework

我在一个过程中生成一个文本文件,该过程最后循环遍历输入给它的字符串列表,并通过MemoryStreamStreamWriter将其转换为{{ 1}}。然后,使用byte[]数据类型将byte[]保存到Oracle数据库。虽然它适用于大多数数据(通常是数千行,但我的数据在5,000到40,000之间,无论结果如何,它都是一样的),但最后有一个特定的BLOB,但是总是不见了。通常,最后出现在文件中的最后一行会被切除一半。

生成message的函数:

byte[]

public byte[] GenerateFileData() { var fileData = new byte[0]; using (var ms = new MemoryStream()) { using (var sw = new StreamWriter(ms)) { Messages.ForEach(x => sw.WriteLine(x)); // Messages is a list of strings in this class fileData = ms.ToArray(); } } return fileData; } 保存到数据库的功能:

byte[]

最后,将数据转换为文件的功能:

public void SaveLogFile(int entityId, byte[] fileData)
{
    using (var context = new SomeDBContext())
    {
        var entity= context.SomeEntity.FirstOrDefault(x => x.Id == runId);
        if(entity != null)
        {
            entity.LOG_FILE = fileData;
            context.SaveChanges();
        }
    }
}

1 个答案:

答案 0 :(得分:2)

在编写器关闭此代码后,尝试获取MemoryStream内容:

public byte[] GenerateFileData()
{
    var fileData = new byte[0];

    using (var ms = new MemoryStream())
    {
        using (var sw = new StreamWriter(ms))
        {
            Messages.ForEach(x => sw.WriteLine(x)); // Messages is a list of strings in this class
        }
        ms.Flush();
        fileData = ms.ToArray();
    }

    return fileData;
}