データベース内の特定のレコードの挿入ステートメントを作成しようとしています。 DataTable
は100行を返しますが、foreach
ループでは、最初の行に100回インサートを実行しています。 DataTable
の各行に対して挿入を実行します。最初の行を更新するForeachループのみ
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]を使用する必要がありますように
'。実際には、 'dr'を全く使用しません。 – Rob