Foreach 循环只更新第一行

Foreach loop only updating first row

我正在尝试为数据库中的某些记录创建插入语句。 所以 DataTable 可以 return 100 行,但是在 foreach 循环中它是 运行 将插入 100 次到第一行。我想为 DataTable.

中的每一行插入 运行
string status = @"select j.*, " +
                 " (SELECT Status FROM jobstat WHERE jobstat.JobID = j.ID ORDER BY Sequence DESC LIMIT 0,1)  AS CurrentStatusCode " +
                 " from job_new j " +
                 " left join jobstat js on js.jobid=j.id " +
                 " where j.delivermemberid=j.jobownerid and j.jobdate= '2016-05-20' " +
                 " and j.isactive=1 and j.IsOnManifest = 1 " +
                 " Group by j.ID " +
                 " HAVING  CurrentStatusCode NOT IN ('DEL' )";

DataTable dtStatus = BaseDisplaySet.CustomFill(status, param);
DataSet dsStat = new DataSet();
dsStat.Tables.Add(dtStatus);

if (dsStat.Tables[0].Rows.Count > 0)
{
    foreach (DataRow dr in dtStatus.Rows)
    {
        string InsertStatusSQL = @"INSERT INTO jobstat (JobID,CompanyID,Status,Descrip,Sequence,CompCode,StatusID,StatusDate,Comment1,Comment2, CreateMethod) 
                VALUES (" + int.Parse(dtStatus.Rows[0]["ID"].ToString()) + ", 171 , '" + dtStatusfield.Rows[0]["StatusCode"].ToString() + "' , '" + dtStatusfield.Rows[0]["Text"].ToString() + "' , '" + dtStatusfield.Rows[0]["ListOrder"].ToString() +
        "' ,0 , '" + int.Parse(dtStatusfield.Rows[0]["ID"].ToString()) + "' , '" + DateTime.Now + "' ,'WebService', '' , 'WebService')";

        BaseDisplaySet.CustomNonQuery(InsertStatusSQL, param);
    }
}

我也试过foreach (DataRow dr in dsStat.Tables[0].Rows),但也没用。它仍然只更新了第一行。

看起来你应该使用 dataRow 而不是 dtStatus.Rows[0]。您根本不使用 foreach 循环。

            foreach (DataRow dataRow in dtStatus.Rows)
            {
                string InsertStatusSQL = @"INSERT INTO jobstat (JobID,CompanyID,Status,Descrip,Sequence,CompCode,StatusID,StatusDate,Comment1,Comment2, CreateMethod) 
                 VALUES (" + int.Parse(dataRow["ID"].ToString()) + ", 171 , '" + dataRow["StatusCode"].ToString() + "' , '" + dataRow["Text"].ToString() + "' , '" + dataRow["ListOrder"].ToString() +
                "' ,0 , '" + int.Parse(dataRow["ID"].ToString()) + "' , '" + DateTime.Now + "' ,'WebService', '' , 'WebService')";

                BaseDisplaySet.CustomNonQuery(InsertStatusSQL, param);
            }

使用您的变量 dr 而不是 dtStatus.Rows[0],例如:

 foreach (DataRow dr in dtStatus.Rows)
     {
         string InsertStatusSQL = @"INSERT INTO jobstat (JobID,CompanyID,Status,Descrip,Sequence,CompCode,StatusID,StatusDate,Comment1,Comment2, CreateMethod) 
         VALUES (" + int.Parse(dr["ID"].ToString()) + ", 171 , '" + dr ["StatusCode"].ToString() + "' , '" + dr["Text"].ToString() + "' , '" + dr ["ListOrder"].ToString() +
           "' ,0 , '" + int.Parse(dr["ID"].ToString()) + "' , '" + DateTime.Now + "' ,'WebService', '' , 'WebService')";

          BaseDisplaySet.CustomNonQuery(InsertStatusSQL, param);
     }