asp.net 调试“ResultView”显示“枚举未产生结果”?

v7pvogib  于 2023-02-26  发布在  .NET
关注(0)|答案(2)|浏览(179)

我已经应用了断点,当我点击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
uxh89sit

uxh89sit1#

请参见similar question。使用调试器检查调用Read(),它将尝试转到下一行。您的表是否只有1行?
第一次查看数据时(实际上可以看到数据,而不是第二次看到异常时),是否显示了多行?如果没有,则说明查询有问题,因为它只返回一行。
如果有多行,那么在DataReader对象上使用LINQ可能会有问题。完全透明,我以前从未使用LINQ循环通过SqlDataReader。下面是我的做法:

using (var rdr = cmd.ExectuteReader())
{
    while(rdr.Read())
    {
         //do something with the first column
         Console.WriteLine(rdr[0]);
    }
}

如果你想使用LINQ,你总是可以创建一个数据表来读取。

using (var rdr = cmd.ExectuteReader())
{
    DataTable datatable = new DataTable();
    datatable.Load(rdr)
}

...
var results = (from row in datatable...
mwkjh3gx

mwkjh3gx2#

它第一次工作时显示数据的子集。在 * 最后一个成功行+ 1* 的索引处可能有一个破记录。
然后枚举器将停止工作。

在我的具体例子中,调用ToList()运行良好。(CsvHelper,CS0726)https://github.com/JoshClose/CsvHelper/issues/1434

相关问题