【问题标题】:Retrieve all rows from DataTable in asp.net从 asp.net 中的 DataTable 中检索所有行
【发布时间】:2016-08-28 13:40:38
【问题描述】:

我创建了一个临时的datatable 来存储临时数据,然后再将其发送到数据库。但是在创建之后,现在我想从这个临时的datatable 中获取所有行并将它们保存到数据库中。为此,我使用 foreach 循环循环我的datatable

   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 个具有不同信息的 datarows 一样,那么这会将第一行的数据存储在数据库中 4 次。我做错了什么?

【问题讨论】:

  • 那是因为您只专门索引第一行。
  • @IrishChieftain 那么我想做什么以及如何做?
  • @IrishChieftain 我明白了。谢谢:)
  • r代替dt.Rows[0],例如:string Fname = r["Name"].ToString();

标签: asp.net datatable


【解决方案1】:

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);
}

【讨论】:

    【解决方案2】:

    您可以使用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);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-29
      • 1970-01-01
      • 2013-09-02
      • 1970-01-01
      • 2017-02-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多