CopyToDataTable Method - ArgumentNullException



我在CopyToDataTable方法中收到此错误。

ArgumentNullException值不能为空。参数名称:源

按照以下步骤操作 - http://msdn.microsoft.com/en-us/library/bb669096%28v=vs.110%29.aspx

public DataTable GetAllRecords()
  {
    try
     {
       DataTable dt = new DataTable();
       IEnumerable<DataRow> query = ((from p in MedianDB.tblCountries
                  select p).OrderBy(p => p.CountryName)) as IEnumerable<DataRow>;
       query.CopyToDataTable<DataRow>(dt,LoadOption.PreserveChanges);
       return dt;                
     }
   catch (Exception ex)
     {
       throw ex;
     }
  }

使用 .Net Framework 4.0,实体数据模型

好的,所以这很简单。您正在得到一个ArgumentNullException,并记录如下:

源 IEnumerable 序列为空或目标数据表为空。

我们知道dt不是null所以这意味着问题是你query null。因此,要修复它,您应该能够利用AsEnumerable扩展:

IEnumerable<DataRow> query = (from p in MedianDB.tblCountries
                              select p)
                             .OrderBy(p => p.CountryName)
                             .AsEnumerable();
query.CopyToDataTable<DataRow>(dt,LoadOption.PreserveChanges);

你不能只是把你得到的结果作为一个IEnumerable<DataRow>,你需要让它成为一个IEnumerable<DataRow>as IEnumerable<DataRow>,这段代码给了你一个null


仅供参考,这个catch实际上比让它抛出更糟糕,因为您在此过程中丢失了堆栈跟踪:

catch (Exception ex)
{
    throw ex;
}

如果你不打算真正处理它,就把try/catch一起扔掉。

最新更新