我已经应用了断点,当我点击query
“ResultView”时,它显示数据,但当我点击第二次时,数据为空,它显示Enumeration yielded no results
。奇怪的是,是否有缓存问题或其他问题?为什么我点击1次后它显示空,它只是第一次显示数据,
var connectionString = String.Format(@"
Provider=Microsoft.ACE.OLEDB.12.0;
Data Source={0};
Extended Properties=""Excel 12.0 Xml;HDR=YES""
", filePath);
//Creating and opening a data connection to the Excel sheet
using (var conn = new OleDbConnection(connectionString))
{
conn.Open();
var cmd = conn.CreateCommand();
cmd.CommandText = "select * from [الحيازات$]";
using (var rdr = cmd.ExecuteReader())
{
//LINQ query - when executed will create anonymous objects for each row
var query =
(from DbDataRecord row in rdr
select row).Select(x =>
{
//dynamic item = new ExpandoObject();
Dictionary<string, string> item = new Dictionary<string, string>();
for (int i = 0; i < x.FieldCount; i++)
{
string data = "" + rdr.GetName(i) + ":{'id':'" + rdr.GetName(i) + "','code':'" + rdr.GetName(i) + "','title':'" + rdr.GetName(i) + "','type':'text','response";
item.Add(data, x[i] + "}");
}
return item;
});
//Generates JSON from the LINQ query
json = JsonConvert.SerializeObject(query, Formatting.Indented).Replace("'", "\"");// break point here
2条答案
按热度按时间uxh89sit1#
请参见similar question。使用调试器检查调用
Read()
,它将尝试转到下一行。您的表是否只有1行?第一次查看数据时(实际上可以看到数据,而不是第二次看到异常时),是否显示了多行?如果没有,则说明查询有问题,因为它只返回一行。
如果有多行,那么在DataReader对象上使用LINQ可能会有问题。完全透明,我以前从未使用LINQ循环通过SqlDataReader。下面是我的做法:
如果你想使用LINQ,你总是可以创建一个数据表来读取。
mwkjh3gx2#
它第一次工作时显示数据的子集。在 * 最后一个成功行+ 1* 的索引处可能有一个破记录。
然后枚举器将停止工作。
在我的具体例子中,调用ToList()运行良好。(CsvHelper,CS0726)https://github.com/JoshClose/CsvHelper/issues/1434