2016-05-30 49 views
1

データベース内の特定のレコードの挿入ステートメントを作成しようとしています。 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]を使用する必要がありますように

+2

'。実際には、 'dr'を全く使用しません。 – Rob

答えて

1

のようなあなたの変数dr代わりのdtStatus.Rows[0]を使用してください:[0] [ "ID"]ではなく `DR [ "ID"]より`たび、あなたは `dtStatus.Rowsを挿入する

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

は、それは見えます。 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); 
      } 
関連する問題