我有一个使用数据集的方法,
var EmpNameList = new List<string>();
var EmpDS = GetEmployeeList();
foreach (DataRow EmpDR in EmpDS.Tables[0].Rows)
{
EmpNameList.Add(EmpDR["EmpName"].ToString()); // Error on this line
}
例外情况:
列'EmpName'不属于表'EmpDetailTbl' 在System.Data.DataRow.GetDataColumn(String columnName) at System.Data.DataRow.get_Item(String columnName) 在System.Data.DataRowExtensions.Field [T](DataRow row,String columnName)
有时我们也会为同一方法获得以下异常
在System.Data.DataTableCollection.get_Item(Int32 index)中找不到表0
以上所有异常都不会一致地再现,而且是间歇性的。
GetEmployeeList定义如下所示
public DataSet GetEmployeeList()
{
var Connectionstring = "MyConnectionString";
var query = "Select EmpName, EmpId, HireDate from EmpDetail";
DataSet ds = new DataSet();
using (OleDbConnection connection = new OleDbConnection(Connectionstring))
using (OleDbCommand command = new OleDbCommand(query, connection))
using (OleDbDataAdapter adapter = new OleDbDataAdapter(command))
{
adapter.Fill(ds,"EmpDetailTbl");
return ds;
}
}
我也尝试过使用SqlConnection类的SQL Server。
这似乎很奇怪吧?
答案 0 :(得分:2)
如果要在DataSet中填充其他DataTable,那么&#34; EmpDetailTbl&#34;可能不是每次都是第一个(0)。请按名称参阅DataTable:
foreach (DataRow EmpDR in EmpDS.Tables["EmpDetailTbl"].Rows) {
答案 1 :(得分:0)
http://msdn.microsoft.com/en-us/library/y4b211hz(v=vs.110).aspx
查看备注 - 如果您使用的实际查询字符串不返回任何行,则不会向数据集添加任何表。另请注意,使用的字符串区分大小写。