我可以使用 foreach(r 中的 DataRow 行)
吗?
我有这个代码:
conStr = @"Data Source=.\SQLEXPRESS;AttachDbFilename=" + Server.MapPath("~/App_Data/Database.mdf") + ";Integrated Security=True;User Instance=True";
string sqlStr = "Select * FROM Msgs WHERE Reciver='"+Reciver+"'";
SqlDataAdapter daObj = new SqlDataAdapter(sqlStr, conStr);
DataSet dsObj = new DataSet();
daObj.Fill(dsObj);
DataTableReader r = dsObj.Tables[0].CreateDataReader();
foreach (DataRow row in r)
我运行了调试,它停在了 foreach 的那一行,并给了我这个错误:
无法将“System.Data.Common.DataRecordInternal”类型的对象转换为类型“System.Data.DataRow”
我该如何解决?
最佳答案
foreach
试图从 DataTableReader
中转换一个 DataRow
,但它不能。
DataTableReader
读取 行,但没有 行。它只能逐行读取 DataTable
中的行。 Rafa 在这篇博文中的回答超越了 DataTableReader
的最佳使用。
如果您必须使用 DataTableReader
,那么只需将它放在 while
循环中:
while (r.Read())
{
//Access r with r["columnName"]
}
如果您想要foreach
,只需遍历DataTable
本身中的行:
foreach (DataRow row in dsObj.Tables[0].Rows)
{
//Do something with the rows
}
就性能而言,我认为 foreach
会更好,因为它不需要您实例化另一个对象(DataTableReader
),您还可以得到如果您想修改行的内容,则可以对行进行写访问。
关于c# - 使用 foreach 遍历 DataTableReader 中的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22261877/