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);
}
我正在尝试为数据库中的某些记录创建插入语句。
所以 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);
}