2017-11-23 8 views
0

私に頭痛を与える問題があります。この問題を避けるために、私はあなたの助けや助言が必要です。1つのアクションで値を挿入した後にテーブルからMAX値を取得

私は2つのテーブル "添付ファイルを参照してください"最初のテーブルはバケーションテーブルであり、2番目のテーブルはリクエストテーブルです。私はReq_IDを使用してバケーションテーブルをリクエストテーブルにリンクしました。 Requestテーブルに値を挿入すると、Requsetテーブルに値が完全に挿入されます。値を挿入した後にリクエストテーブルからMAX(Req_ID)を取得したいときは、「0」を取得します。バケーションテーブルにリンクするにはReq_IDが必要です。

問題がどこにあるか私を助けるために、コードの上に見てみてください。

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Data; 

public partial class Vavation : System.Web.UI.Page 
{ 
    Dbclass db = new Dbclass(); 
    string s = ""; 
    string d = ""; 
    int R; 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     try 
     { 
      if(!IsPostBack) 
      { 
       tbid.Text = Session["uid"].ToString(); 
       lblDept.Text = Session["Did"].ToString(); 
       lblid.Text = tbid.Text; 
       string s = "Select * From Employee where National_ID='" + lblid.Text + "'"; 
       DataTable dt = db.getTable(s); 
       if (dt != null && dt.Rows.Count > 0) 
       { 
        tbid.Text = dt.Rows[0]["National_ID"].ToString(); 
        tbname.Text = dt.Rows[0]["FirstName"].ToString() + ' ' + dt.Rows[0]["LastName"].ToString(); 
        lblDept.Text = dt.Rows[0]["Dept_ID"].ToString(); 
       } 
       string d = "SELECT Balance FROM Vacation WHERE (National_ID = '" + lblid.Text + "') AND (StartDate =(SELECT MAX(StartDate) FROM Vacation WHERE (National_ID ='" + lblid.Text + "'))) AND (Balance = (SELECT MIN(Balance) FROM Vacation WHERE (National_ID ='" + lblid.Text + "')))"; 
       DataTable t = db.getTable(d); 
       if (t != null && t.Rows.Count > 0) 
       { 
        lbldays.Text = t.Rows[0]["Balance"].ToString(); 
       } 
      } 

     } 
     catch(Exception ex) 
     { 
      lberr.Text = ex.Message; 
     } 
    } 
    protected void btnadd_Click(object sender, EventArgs e) 
    { 
     s = "Insert into Request (National_ID, Type_Req, Dept_ID,Date) values ('" + lblid.Text + "', 'Vacation','" + lblDept.Text + "', '"+ DateTime.Now +"')"; 
      if (db.Run(s)) 
      { 

      } 
      GetMax(); 
      AddVaction(); 

    } 
    private void GetMax() 
    { 
     d = "select MAX(Req_ID) from Request"; 
     d = lblReq.Text; 
     DataTable dt = db.getTable(d); 
     if (dt != null && dt.Rows.Count > 0) 
     { 
      R = Convert.ToInt32(lblReq.Text); 

     } 
    } 


    private void AddVaction() 
    { 
     int Remaine = Convert.ToInt32(lbldays.Text); 
     DateTime start = DateTime.Parse(tbstartvaca.Text).Date; 
     if (Remaine <= 30 && Remaine >= 0 && start >= DateTime.Now) 
     { 
     TimeSpan remaindate; 
     DateTime end = DateTime.Parse(tbendvaca.Text).Date; 
     TimeSpan vacation = TimeSpan.Parse(lbldays.Text); 
     int Balance = (int)vacation.TotalDays; 
     TimeSpan total; 
     if (start > end) 
     { 
      lberr.Text = "Please check again on Starting date"; 
      return; 
     } 

      remaindate = end - start; 
      int days = (int)remaindate.TotalDays; 
      lberr.Text = "you have left with " + remaindate.TotalDays + "days."; 
      total = vacation - remaindate; 
      int T = (int)total.TotalDays; 
      lbldays.Text = "you have left with " + total.TotalDays + "days."; 

      s += "Insert into Vacation (Balance, National_ID, NoOfDays, StartDate, EndDate, Dept_ID, Req_date, Req_ID) values ('" + T + "', '" + lblid.Text + "', '" + days + "', '" + tbstartvaca.Text + "', '" + tbendvaca.Text + "', '" + lblDept.Text + "', '" + DateTime.Now + "', '" + R + "')"; 
      { 
       //lberr.Text = "The data has update"; 
      } 

     } 
     else 
     { 
      lberr.Text = "You Don't a Balance of Vacation OR Start of Vacation is less than date of day "; 
     } 
    } 
} 


あなたは私に知らせてくださいより詳細な説明が必要な場合。

Convert.ToInt32(lblReq.Text); 

lblReq.Textにテキストが含まれています:あなたは、DTから値を取得する必要があります

+0

'D = "選択要求からMAX(REQ_ID)"。 d = lblReq.Text; 'あまり意味がありません... – oerkelens

+0

ここにあなたの意図しないコードがあるようです。 d = "リクエストからMAX(Req_ID)を選択"; d = lblReq.Text; //なぜこの行ですか? –

+0

あまり意味のない名前でグローバルに定義された変数を使って何かを格納することは、実際にはっきりとしたコードにはなりません。たとえあなたが 'Max'クエリを実行しても(あなたはそうではありませんが)、結果を何もしません。あなたが達成しようとしていることはまったく不明です。 – oerkelens

答えて

0

はgetting.Whyは、このです。

はこの試してみてください。

private void GetMax() 
{ 
    d = "select MAX(Req_ID) as ID from Request"; 
    d = lblReq.Text; 
    DataTable dt = db.getTable(d); 
    if (dt != null && dt.Rows.Count > 0) 
    { 
     R = Convert.ToInt32(dt.Rows[0]["ID"].ToString()); 

    } 
} 
関連する問題