我有一个excel文件与1列,列包含混合数据,int & string。

在从excel文件中读取数据之后,我看到带有数据AZ-965的单元格为null。这是我的字符串连接
return new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source="
+ excel + ";Extended Properties='Excel 12.0;HDR=YES;IMEX=1;ImportMixedTypes=Text;TypeGuessRows=0;';");我就是这样从Excel文件中读取数据的
private static List<T> GetImportedData<T>(string sheet, OleDbConnection myConnection,
List<string> column, ImportDataView<T> view) where T : IImportableData
{
var cols = string.Join( ",", column.Select(Cast));
var formattableString = $"select {cols} from [{sheet}$]";
using (var MyCommand = new
OleDbDataAdapter(formattableString, myConnection))
{
using (var DtSet = new DataSet())
{
int nbRow = 0;
MyCommand.Fill(DtSet);
var dt = DtSet.Tables[0];
var rows = dt.AsEnumerable();
var convertedList = rows
//.AsParallel()
.Select(x => GenerateImport<T>(x, column, ref nbRow, view))
.ToList();
return convertedList;
}
}
}
private static string Cast(string arg)
{
return $"IIf(IsNull([{arg}]), '', CStr([{arg}]))";
// return $"CStr([{arg}]) as {cleanName(arg)}";
//return $"[{arg}]";
}我检查了这个link,但是没有什么是工作的,是一样的
发布于 2020-01-25 02:34:36
连接字符串中的TypeGuessRows不是连接字符串属性,至少我不知道。这是一个注册表项:
所以我不认为它做的是你想的那样.或者其他任何事情。
如果无法控制注册表或文件的内容,我唯一的建议是将连接字符串(HDR=YES)中的头属性更改为"no“,以便将第一个记录以文本形式读取.然后,您可以有效地垃圾第一行。
这不是一个很好的解决方案,但它应该做你想要的。
或者,您可以尝试使用DbDataReader来读取内容,而不是使用数据适配器:
using (OleDbCommand cmd = new OleDbCommand(formattableString, conn))
{
using (OleDbDataReader reader = cmd.ExecuteReader())
{
string column = reader.IsDBNull(0) ? null : reader.GetValue(0).ToString();
}
}根据我对您所要做的工作的推断,数据读取器实际上也可能提供其他一些优势。
https://stackoverflow.com/questions/59879453
复制相似问题