我创建了一个临时datatable
来存储临时数据,然后再将其发送到数据库。但是在创建之后我现在想要从这个临时datatable
中获取所有行并将它们保存到数据库中。为此,我使用foreach循环<{1}}循环
datatable
问题是它只是为了整个循环计数一次又一次地获取第一行的数据。就像我有4个 foreach(DataRow r in dt.Rows)
{
string Fname = dt.Rows[0]["Name"].ToString();
string cType = dt.Rows[0]["ContentType"].ToString();
byte[] ePic = (byte[])dt.Rows[0]["pic"];
BAL.saveEventPictures(Convert.ToInt32(lblEventID.Text), Fname, cType, ePic);
}
具有不同的信息一样,这将把第一行的数据存储在数据库中4次。我在做什么错误?
答案 0 :(得分:0)
dt.Rows[0]
表示您始终访问DataTable
的第一行。您需要使用for
循环而不是foreach
并使用i
访问表的每个索引:
for (int i = 0; i < dt.Rows.Count; i++)
{
string Fname = dt.Rows[i]["Name"].ToString();
string cType = dt.Rows[i]["ContentType"].ToString();
byte[] ePic = (byte[])dt.Rows[i]["pic"];
BAL.saveEventPictures(Convert.ToInt32(lblEventID.Text), Fname, cType, ePic);
}
答案 1 :(得分:0)
您可以使用for
循环来获取有关其数据表中列的所有值,以便在其变量中赋值,以便您可以使用这种方式。因为如果你使用数据表行的硬编码索引,那么它每次都应该只获取单个数据。
此处i
是行和列名称的索引,用于从行中获取值。因此,使用基于动态的索引用于获取所有记录。
for (int i = 0; i < dt.Rows.Count; i++)
{
string Fname = dt.Rows[i]["Name"].ToString();
string cType = dt.Rows[i]["ContentType"].ToString();
byte[] ePic = (byte[])dt.Rows[i]["pic"];
BAL.saveEventPictures(Convert.ToInt32(lblEventID.Text), Fname, cType, ePic);
}