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から値を取得する必要があります
'D = "選択要求からMAX(REQ_ID)"。 d = lblReq.Text; 'あまり意味がありません... – oerkelens
ここにあなたの意図しないコードがあるようです。 d = "リクエストからMAX(Req_ID)を選択"; d = lblReq.Text; //なぜこの行ですか? –
あまり意味のない名前でグローバルに定義された変数を使って何かを格納することは、実際にはっきりとしたコードにはなりません。たとえあなたが 'Max'クエリを実行しても(あなたはそうではありませんが)、結果を何もしません。あなたが達成しようとしていることはまったく不明です。 – oerkelens