- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在我的项目中使用 CSVReader 在 Windows 服务中读取 .csv 文件。我们将 .csv 文件传递给 CSVReader 以处理该文件并且它工作正常。但最近我们决定将 csv 文件保存到数据库表并从那里读取。当用户提交一个csv文件进行处理时,我们的aspx页面会读取csv文件并将其转换为字节数组并将其保存到数据库中。并且该服务将读取表并获取字节数组并将其转换为文件流。此流将传递给 CSVReader 以供进一步工作。现在它为最后一行最后一列抛出错误。它仅在保存并从数据库读取之后发生。我收到以下错误。不知道如何解决这个问题。
“CSV 似乎在位置‘494’处的记录‘9’字段‘3’附近损坏。当前原始数据:‘
听到的是代码将文件转换为字节数组......
try
{
fs = new FileStream(filepath, FileMode.Open);
fsbuffer = new byte[fs.Length];
fs.Read(fsbuffer, 0, (int)fs.Length);
}
从数据库读取到字节数组......
myobject.FileByteArray = ObjectToByteArray(row);
public byte[] ObjectToByteArray(DataRow row)
{
if (row["fileBytearray"] == null)
return null;
try
{
BinaryFormatter bf = new BinaryFormatter();
System.IO.MemoryStream ms = new System.IO.MemoryStream();
bf.Serialize(ms, row["fileBytearray"]);
return ms.ToArray();
}
}
Stream fileStream = new MemoryStream(myobject.FileByteArray)
using (CsvReader csv =
new CsvReader(new StreamReader(fileStream, System.Text.Encoding.UTF7), hasHeader, ','))
最佳答案
我无法重现您的问题,因此,由于没有看到从头到尾的保存和加载,我建议尝试以下方法进行检索:
public MemoryStream LoadReportData(int rowId)
{
MemoryStream stream = new MemoryStream();
using (BinaryWriter writer = new BinaryWriter(stream))
{
using (DbConnection connection = db.CreateConnection())
{
DbCommand selectCommand = "SELECT CSVData FROM YourTable WHERE Id = @rowId";
selectCommand.Connection = connection;
db.AddInParameter(selectCommand, "@rowId", DbType.Int32, rowId);
connection.Open();
using (IDataReader reader = selectCommand.ExecuteReader(CommandBehavior.SequentialAccess))
{
while (reader.Read())
{
int startIndex = 0;
int bufferSize = 8192;
byte[] buffer = new byte[bufferSize];
long retVal = reader.GetBytes(0, startIndex, buffer, 0, bufferSize);
while (retVal == bufferSize)
{
writer.Write(buffer);
writer.Flush();
startIndex += bufferSize;
retVal = reader.GetBytes(0, startIndex, buffer, 0, bufferSize);
}
writer.Write(buffer, 0, (int)retVal);
}
}
}
}
return stream;
}
您需要将 selectCommand sql 和参数替换为您用于返回数据的任何 sql。
此方法使用 SqlDataReader
从适当的行(在我的示例中由 rowId 标识)和列(在我的示例中称为 CSVData
)顺序读取字节,这应该避免出路时的任何截断问题(可能是您的 DataTable 对象仅返回前 n
字节)。 MemoryStream 对象可用于将 CSV 文件重新保存到文件系统以进行测试,或直接送入您的 CSVReader。
如果您可以发布您的Save
方法(您实际上将数据保存到数据库中),那么我们也可以检查它以确保那里也没有发生截断。
我现在可以提出的另一个建议是将文件加载到 byte
数组中。如果你打算一次性加载文件,那么你可以简单地替换:
try
{
fs = new FileStream(filepath, FileMode.Open);
fsbuffer = new byte[fs.Length];
fs.Read(fsbuffer, 0, (int)fs.Length);
}
与
byte[] fileBytes = File.ReadAllBytes(filepath);
关于c# - CSVReader 在最后一行最后一列抛出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12862993/
我正在开发一个应用程序,用于连续循环地从多个发件人发送批量电子邮件。发件人电子邮件 ID 存储在 csv 文件中,我在 ReadFile 类中读取该文件,并在 servlet 类中调用它,在该类中我还
我想使用 opencsv 中的 CSVReader 来读取逗号分隔值的字符串。我过去曾将此阅读器与多部分文件一起使用,其中将完成以下操作: CSVReader 阅读器 = 新 CSVReader(新
我有一个包含 12 列的 .csv 文件,并使用 CSVReader 类读取该文件。 List rows = reader.readAll(); 但我发现有些 String[] 的元素少于 12 个。
所以我试图让下面的代码工作“https://github.com/jintrone/TEVA”,唯一的问题是我是一个Java新手。起初,我收到编译错误“it.uniroma1.dis.wsngroup
我正在尝试创建一个简单的类来读取 csv 文件并将内容存储在 ArrayList>. 我正在创建一个通用类 CsvReader,以便我可以处理不同类型的数据:int、double、String。比如
我在我的项目中使用 CSVReader 在 Windows 服务中读取 .csv 文件。我们将 .csv 文件传递给 CSVReader 以处理该文件并且它工作正常。但最近我们决定将 csv 文件
我正在尝试使用 openCSV 打开一个 csv 文件,遍历每一列,如果 userID 不同,则在文件末尾写入一个新的 JavaBean 对。 问题是读者只检查我文件的第一列而不是整个文件。创建时,该
我正在使用 CSVReader 在 java 中读取一个 csv 文件。它正在“工作”,但是当我尝试将行拆分为这样的字符串数组时,我发现了一个小问题: reader = new CSVReader(n
我想从 csv 文件中读取数据并将其存储到数据库中。这就是我保存 csv 文件的方式(这没有错误 - 只是为了显示我计划使用 CSVreader 读取的文件的存储位置和方式): synchronize
我有一个 CSV 文件,但在解析时遇到问题。我正在使用 opencsv图书馆。这是我的数据的样子以及我想要实现的目标。 RPT_PE,CLASS,RPT_MKT,PROV_CTRCT,CENTER_N
我得到了一个 csv 文件,但我想跳过第一行数据并转到下一行。这是我的代码: def read_csv(inputfile): return list(csv.reader(inputfile
所以,我遇到了这种情况:我有两个 .csv 文件,我需要读取并保存这两个文件的数据。 问题出在这里: while ((nextPM = csvReader2.readNext()) != null)
我有一个记录文件,示例记录如下所示: 122792 2014-07-26 1672 前两条记录由空格分隔,后两条记录由制表符空格分隔。如何让 csvreader 读取所有三列?我尝试过类似的方法,
这个问题已经有答案了: How can I avoid ArrayIndexOutOfBoundsException or IndexOutOfBoundsException? [duplicate]
我一直在研究一整天。无论我如何编码,结果都不是我想要的。 首先,我正在处理大数据,因此,我认为保持复制和粘贴行条目效率不高。我正在读取一个 CSV 文件,它正在运行,它正在删除我告诉它要删除的所有内容
我有一个(非常大的)CSV 文件,看起来像这样: header1,header2,header3 name0,rank0,serial0 name1,rank1,serial1 name2,rank2
我有一个包含以下数据的 CSV month,year,speed 12,2010,76 2,2000,45 12,1940,30 我正在使用读取它的第 3 方加载。简而言之,它是一个 CSVReade
我已经创建了 CSVReader,我正在尝试从 Assets 中读取 csv 文件,因此我应该使用 InputStream。但是我下面的代码没有输入流构造函数。谁能告诉我如何在代码中添加或更改某些内容
我正在使用 CSVHelper NuGet 包,但收到错误消息“CSV 文件中不存在字段”。这是我的代码: using (TextReader prodFile = System.IO.File.Op
我正在尝试从 CSV 创建导入程序。 我的代码是 csv = New CsvReader(New StreamReader("CSVFileLocation"), True) Dim fieldCou
我是一名优秀的程序员,十分优秀!