自动生成想“变”就“变”
生活随笔
收集整理的這篇文章主要介紹了
自动生成想“变”就“变”
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
今天早上急忙趕來,把周六周日調試好的代碼更新到我自己的機器上。我想總算是輕松了,周6周日沒白下功夫。But...自動生成代碼好像和實際工作結合有一點不方便的地方,所以重新整理思路,重新編寫代碼。 簡單說一下自動生成,(我實際工作中是讓呈批件的代號實現自動生成)過程是這樣的: 1.數據庫中肯定有兩張表,一張主表,記錄所有信息,比如是個報表之類的,那么會記錄登記的人員及部門。第二張就是更新的讀寫表,記錄號碼,把號碼寫入主表后,自動 +1。當然過程是通過存儲過程實現的。 存儲過程代碼:(LastYear=DataTime.Now.Year; Dep=部門) CREATE PROCEDURE AM_GetNum @LastYear int,
@Dep varchar(50)
AS if exists(select Num from AM_Num where LastYear=@LastYear and Dep=@Dep)
begin
update AM_Num set Num=Num+1 where? LastYear=@LastYear and Dep=@Dep
end else
begin
insert into AM_Num(Num,LastYear,Dep) values(1,@LastYear,@Dep)
end select Num from AM_Num where LastYear=@LastYear and Dep=@Dep
GO
2.頁面中定義一個Label,顯示這個自動生成的號碼。我們的思路是這樣,寫的人不會看到這個號碼,因為我們并不知道這個人是否會保存或者提交這個表,所以避免無謂的失誤,我們定義只有這個人保存或者更改才給予他這個號碼,所以保存或者提交后。會在主頁面生成,主頁面就會顯示這個自動生成的號碼。 3.頁面后臺代碼: private int SetNum()
??? {
??????? if (Label1.Text.Trim().Length > 1 && Label1.Text.Contains("-"))
??????????? return 0; if (lockFlag) return -1; lockFlag = true;
??????? Label1.Text = DateTime.Now.Year.ToString() + "-" + TextBox1.Text + "-" + GetFileNum();?? //TextBox1.Text 是數據庫中主表中的部門,我已經在后臺把它取出來,并且顯示了。
??????? lockFlag = false; return 0;
??? }
??? private string GetFileNum()
??? {
??????? int Num;
??????? SqlConnection con = new SqlConnection(CONN);
??????? SqlCommand cmd = new SqlCommand("AM_GetNum", con);
??????? cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.Add(new SqlParameter("@LastYear", SqlDbType.Int));
??????? cmd.Parameters["@LastYear"].Value = DateTime.Now.Year; cmd.Parameters.Add(new SqlParameter("@Dep", SqlDbType.VarChar));
??????? cmd.Parameters["@Dep"].Value = TextBox1.Text; con.Open();
??????? Num = (int)cmd.ExecuteScalar();
??????? con.Close(); return Num.ToString("0###");
??? } 在提交的時候(代碼片段): if (IsValid == true)???? //驗證控件是否都通過驗證
??????? {
?????????
??????????? if (SetNum() < 0)
??????????? {
??????????????? Response.Write("<script>alert('系統忙...,請稍后提交!');</script>");
??????????????? return;
??????????? } } 這幾段代碼很重要,因為我們可能會有同時提交一個表的時候,也就是說會有一個人,客戶端提示:系統忙...,請稍后提交!這樣就可以按照次序來排序了。 4.問題來了:我已經生成好了,而且測試數據庫寫入也沒問題。現在的要求是部門不能自動生成,因為可能會別的人填寫不是自己本部門的呈批件。OK好解決,但是一定要寫代碼前構思好,我一開始想的是用Dropdownlist,直接把所有部門都給你寫進去,馬上我就覺得這樣不好,因為部門太多,要幾十個部門,還是讓申請人手寫的好。那OK,現在就是要數據驗證的過程,第一:不能為空,第二:該部門存在。(我們這里部門都是大寫英文字母簡寫),規范一點,把TextBox里面寫的小寫字母轉換成大寫字母,在TextChange中用.ToUpper就OK了,然后查找數據庫中是否有這個部門。(這里最好把搜索數據庫的存儲過程寫好,然后直接調用存儲過程就好了)。 5.查看數據庫中是否有這個部門代碼是: protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs args)
??? {
??????? string DepName = args.Value;
??????? SqlConnection con = new SqlConnection(CONN);
??????? SqlCommand cmd = new SqlCommand("select Count(*) from mrDepartment where DepName = '" + TextBox1.Text + "'", con);
??????? con.Open();
??????? int count = Convert.ToInt32(cmd.ExecuteScalar());
??????? con.Close();
??????? if (count > 0)
??????? {
??????????? args.IsValid = true;
??????? }
??????? else
??????? {
??????????? args.IsValid = false;
??????? }
???????
??? } 這個代碼很簡單,我是怕有別的人看我說半天不明白。。。。呵呵。 調試沒問題,打完收工!!!!! 總結: 我覺得這個問題關鍵就是對數據庫的理解,我數據庫比較小白,所以只有用一個表更新另一表的辦法,我想應該會有更好的辦法,希望大家指教。:) 然后就是每一個控件一定要考慮周全,因為這個頁面呢還有很多控件,只給有權限的人,簡單說,“新建”和“審批”都是這一個頁面,只是新建會頁面所有控件清空,審批就調出數據庫。所以驗證和權限的把握一定要考慮詳細,如果出了問題就不僅僅是調程序了,就需要調思路了。希望大家指點,如果大家有更好的建議和意見可以提出來,大家一起研究。
@Dep varchar(50)
AS if exists(select Num from AM_Num where LastYear=@LastYear and Dep=@Dep)
begin
update AM_Num set Num=Num+1 where? LastYear=@LastYear and Dep=@Dep
end else
begin
insert into AM_Num(Num,LastYear,Dep) values(1,@LastYear,@Dep)
end select Num from AM_Num where LastYear=@LastYear and Dep=@Dep
GO
2.頁面中定義一個Label,顯示這個自動生成的號碼。我們的思路是這樣,寫的人不會看到這個號碼,因為我們并不知道這個人是否會保存或者提交這個表,所以避免無謂的失誤,我們定義只有這個人保存或者更改才給予他這個號碼,所以保存或者提交后。會在主頁面生成,主頁面就會顯示這個自動生成的號碼。 3.頁面后臺代碼: private int SetNum()
??? {
??????? if (Label1.Text.Trim().Length > 1 && Label1.Text.Contains("-"))
??????????? return 0; if (lockFlag) return -1; lockFlag = true;
??????? Label1.Text = DateTime.Now.Year.ToString() + "-" + TextBox1.Text + "-" + GetFileNum();?? //TextBox1.Text 是數據庫中主表中的部門,我已經在后臺把它取出來,并且顯示了。
??????? lockFlag = false; return 0;
??? }
??? private string GetFileNum()
??? {
??????? int Num;
??????? SqlConnection con = new SqlConnection(CONN);
??????? SqlCommand cmd = new SqlCommand("AM_GetNum", con);
??????? cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.Add(new SqlParameter("@LastYear", SqlDbType.Int));
??????? cmd.Parameters["@LastYear"].Value = DateTime.Now.Year; cmd.Parameters.Add(new SqlParameter("@Dep", SqlDbType.VarChar));
??????? cmd.Parameters["@Dep"].Value = TextBox1.Text; con.Open();
??????? Num = (int)cmd.ExecuteScalar();
??????? con.Close(); return Num.ToString("0###");
??? } 在提交的時候(代碼片段): if (IsValid == true)???? //驗證控件是否都通過驗證
??????? {
?????????
??????????? if (SetNum() < 0)
??????????? {
??????????????? Response.Write("<script>alert('系統忙...,請稍后提交!');</script>");
??????????????? return;
??????????? } } 這幾段代碼很重要,因為我們可能會有同時提交一個表的時候,也就是說會有一個人,客戶端提示:系統忙...,請稍后提交!這樣就可以按照次序來排序了。 4.問題來了:我已經生成好了,而且測試數據庫寫入也沒問題。現在的要求是部門不能自動生成,因為可能會別的人填寫不是自己本部門的呈批件。OK好解決,但是一定要寫代碼前構思好,我一開始想的是用Dropdownlist,直接把所有部門都給你寫進去,馬上我就覺得這樣不好,因為部門太多,要幾十個部門,還是讓申請人手寫的好。那OK,現在就是要數據驗證的過程,第一:不能為空,第二:該部門存在。(我們這里部門都是大寫英文字母簡寫),規范一點,把TextBox里面寫的小寫字母轉換成大寫字母,在TextChange中用.ToUpper就OK了,然后查找數據庫中是否有這個部門。(這里最好把搜索數據庫的存儲過程寫好,然后直接調用存儲過程就好了)。 5.查看數據庫中是否有這個部門代碼是: protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs args)
??? {
??????? string DepName = args.Value;
??????? SqlConnection con = new SqlConnection(CONN);
??????? SqlCommand cmd = new SqlCommand("select Count(*) from mrDepartment where DepName = '" + TextBox1.Text + "'", con);
??????? con.Open();
??????? int count = Convert.ToInt32(cmd.ExecuteScalar());
??????? con.Close();
??????? if (count > 0)
??????? {
??????????? args.IsValid = true;
??????? }
??????? else
??????? {
??????????? args.IsValid = false;
??????? }
???????
??? } 這個代碼很簡單,我是怕有別的人看我說半天不明白。。。。呵呵。 調試沒問題,打完收工!!!!! 總結: 我覺得這個問題關鍵就是對數據庫的理解,我數據庫比較小白,所以只有用一個表更新另一表的辦法,我想應該會有更好的辦法,希望大家指教。:) 然后就是每一個控件一定要考慮周全,因為這個頁面呢還有很多控件,只給有權限的人,簡單說,“新建”和“審批”都是這一個頁面,只是新建會頁面所有控件清空,審批就調出數據庫。所以驗證和權限的把握一定要考慮詳細,如果出了問題就不僅僅是調程序了,就需要調思路了。希望大家指點,如果大家有更好的建議和意見可以提出來,大家一起研究。
轉載于:https://blog.51cto.com/mixangel/54437
總結
以上是生活随笔為你收集整理的自动生成想“变”就“变”的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 来我国,正月没住到头。打2字词
- 下一篇: 怎么画综合布线图