自动生成想“变”就“变”
生活随笔
收集整理的這篇文章主要介紹了
自动生成想“变”就“变”
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
今天早上急忙趕來(lái),把周六周日調(diào)試好的代碼更新到我自己的機(jī)器上。我想總算是輕松了,周6周日沒(méi)白下功夫。But...自動(dòng)生成代碼好像和實(shí)際工作結(jié)合有一點(diǎn)不方便的地方,所以重新整理思路,重新編寫代碼。 簡(jiǎn)單說(shuō)一下自動(dòng)生成,(我實(shí)際工作中是讓呈批件的代號(hào)實(shí)現(xiàn)自動(dòng)生成)過(guò)程是這樣的: 1.數(shù)據(jù)庫(kù)中肯定有兩張表,一張主表,記錄所有信息,比如是個(gè)報(bào)表之類的,那么會(huì)記錄登記的人員及部門。第二張就是更新的讀寫表,記錄號(hào)碼,把號(hào)碼寫入主表后,自動(dòng) +1。當(dāng)然過(guò)程是通過(guò)存儲(chǔ)過(guò)程實(shí)現(xiàn)的。 存儲(chǔ)過(guò)程代碼:(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.頁(yè)面中定義一個(gè)Label,顯示這個(gè)自動(dòng)生成的號(hào)碼。我們的思路是這樣,寫的人不會(huì)看到這個(gè)號(hào)碼,因?yàn)槲覀儾⒉恢肋@個(gè)人是否會(huì)保存或者提交這個(gè)表,所以避免無(wú)謂的失誤,我們定義只有這個(gè)人保存或者更改才給予他這個(gè)號(hào)碼,所以保存或者提交后。會(huì)在主頁(yè)面生成,主頁(yè)面就會(huì)顯示這個(gè)自動(dòng)生成的號(hào)碼。 3.頁(yè)面后臺(tái)代碼: 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 是數(shù)據(jù)庫(kù)中主表中的部門,我已經(jīng)在后臺(tái)把它取出來(lái),并且顯示了。
??????? 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###");
??? } 在提交的時(shí)候(代碼片段): if (IsValid == true)???? //驗(yàn)證控件是否都通過(guò)驗(yàn)證
??????? {
?????????
??????????? if (SetNum() < 0)
??????????? {
??????????????? Response.Write("<script>alert('系統(tǒng)忙...,請(qǐng)稍后提交!');</script>");
??????????????? return;
??????????? } } 這幾段代碼很重要,因?yàn)槲覀兛赡軙?huì)有同時(shí)提交一個(gè)表的時(shí)候,也就是說(shuō)會(huì)有一個(gè)人,客戶端提示:系統(tǒng)忙...,請(qǐng)稍后提交!這樣就可以按照次序來(lái)排序了。 4.問(wèn)題來(lái)了:我已經(jīng)生成好了,而且測(cè)試數(shù)據(jù)庫(kù)寫入也沒(méi)問(wèn)題。現(xiàn)在的要求是部門不能自動(dòng)生成,因?yàn)榭赡軙?huì)別的人填寫不是自己本部門的呈批件。OK好解決,但是一定要寫代碼前構(gòu)思好,我一開(kāi)始想的是用Dropdownlist,直接把所有部門都給你寫進(jìn)去,馬上我就覺(jué)得這樣不好,因?yàn)椴块T太多,要幾十個(gè)部門,還是讓申請(qǐng)人手寫的好。那OK,現(xiàn)在就是要數(shù)據(jù)驗(yàn)證的過(guò)程,第一:不能為空,第二:該部門存在。(我們這里部門都是大寫英文字母簡(jiǎn)寫),規(guī)范一點(diǎn),把TextBox里面寫的小寫字母轉(zhuǎn)換成大寫字母,在TextChange中用.ToUpper就OK了,然后查找數(shù)據(jù)庫(kù)中是否有這個(gè)部門。(這里最好把搜索數(shù)據(jù)庫(kù)的存儲(chǔ)過(guò)程寫好,然后直接調(diào)用存儲(chǔ)過(guò)程就好了)。 5.查看數(shù)據(jù)庫(kù)中是否有這個(gè)部門代碼是: 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;
??????? }
???????
??? } 這個(gè)代碼很簡(jiǎn)單,我是怕有別的人看我說(shuō)半天不明白。。。。呵呵。 調(diào)試沒(méi)問(wèn)題,打完收工!!!!! 總結(jié): 我覺(jué)得這個(gè)問(wèn)題關(guān)鍵就是對(duì)數(shù)據(jù)庫(kù)的理解,我數(shù)據(jù)庫(kù)比較小白,所以只有用一個(gè)表更新另一表的辦法,我想應(yīng)該會(huì)有更好的辦法,希望大家指教。:) 然后就是每一個(gè)控件一定要考慮周全,因?yàn)檫@個(gè)頁(yè)面呢還有很多控件,只給有權(quán)限的人,簡(jiǎn)單說(shuō),“新建”和“審批”都是這一個(gè)頁(yè)面,只是新建會(huì)頁(yè)面所有控件清空,審批就調(diào)出數(shù)據(jù)庫(kù)。所以驗(yàn)證和權(quán)限的把握一定要考慮詳細(xì),如果出了問(wèn)題就不僅僅是調(diào)程序了,就需要調(diào)思路了。希望大家指點(diǎn),如果大家有更好的建議和意見(jiàn)可以提出來(lái),大家一起研究。
@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.頁(yè)面中定義一個(gè)Label,顯示這個(gè)自動(dòng)生成的號(hào)碼。我們的思路是這樣,寫的人不會(huì)看到這個(gè)號(hào)碼,因?yàn)槲覀儾⒉恢肋@個(gè)人是否會(huì)保存或者提交這個(gè)表,所以避免無(wú)謂的失誤,我們定義只有這個(gè)人保存或者更改才給予他這個(gè)號(hào)碼,所以保存或者提交后。會(huì)在主頁(yè)面生成,主頁(yè)面就會(huì)顯示這個(gè)自動(dòng)生成的號(hào)碼。 3.頁(yè)面后臺(tái)代碼: 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 是數(shù)據(jù)庫(kù)中主表中的部門,我已經(jīng)在后臺(tái)把它取出來(lái),并且顯示了。
??????? 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###");
??? } 在提交的時(shí)候(代碼片段): if (IsValid == true)???? //驗(yàn)證控件是否都通過(guò)驗(yàn)證
??????? {
?????????
??????????? if (SetNum() < 0)
??????????? {
??????????????? Response.Write("<script>alert('系統(tǒng)忙...,請(qǐng)稍后提交!');</script>");
??????????????? return;
??????????? } } 這幾段代碼很重要,因?yàn)槲覀兛赡軙?huì)有同時(shí)提交一個(gè)表的時(shí)候,也就是說(shuō)會(huì)有一個(gè)人,客戶端提示:系統(tǒng)忙...,請(qǐng)稍后提交!這樣就可以按照次序來(lái)排序了。 4.問(wèn)題來(lái)了:我已經(jīng)生成好了,而且測(cè)試數(shù)據(jù)庫(kù)寫入也沒(méi)問(wèn)題。現(xiàn)在的要求是部門不能自動(dòng)生成,因?yàn)榭赡軙?huì)別的人填寫不是自己本部門的呈批件。OK好解決,但是一定要寫代碼前構(gòu)思好,我一開(kāi)始想的是用Dropdownlist,直接把所有部門都給你寫進(jìn)去,馬上我就覺(jué)得這樣不好,因?yàn)椴块T太多,要幾十個(gè)部門,還是讓申請(qǐng)人手寫的好。那OK,現(xiàn)在就是要數(shù)據(jù)驗(yàn)證的過(guò)程,第一:不能為空,第二:該部門存在。(我們這里部門都是大寫英文字母簡(jiǎn)寫),規(guī)范一點(diǎn),把TextBox里面寫的小寫字母轉(zhuǎn)換成大寫字母,在TextChange中用.ToUpper就OK了,然后查找數(shù)據(jù)庫(kù)中是否有這個(gè)部門。(這里最好把搜索數(shù)據(jù)庫(kù)的存儲(chǔ)過(guò)程寫好,然后直接調(diào)用存儲(chǔ)過(guò)程就好了)。 5.查看數(shù)據(jù)庫(kù)中是否有這個(gè)部門代碼是: 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;
??????? }
???????
??? } 這個(gè)代碼很簡(jiǎn)單,我是怕有別的人看我說(shuō)半天不明白。。。。呵呵。 調(diào)試沒(méi)問(wèn)題,打完收工!!!!! 總結(jié): 我覺(jué)得這個(gè)問(wèn)題關(guān)鍵就是對(duì)數(shù)據(jù)庫(kù)的理解,我數(shù)據(jù)庫(kù)比較小白,所以只有用一個(gè)表更新另一表的辦法,我想應(yīng)該會(huì)有更好的辦法,希望大家指教。:) 然后就是每一個(gè)控件一定要考慮周全,因?yàn)檫@個(gè)頁(yè)面呢還有很多控件,只給有權(quán)限的人,簡(jiǎn)單說(shuō),“新建”和“審批”都是這一個(gè)頁(yè)面,只是新建會(huì)頁(yè)面所有控件清空,審批就調(diào)出數(shù)據(jù)庫(kù)。所以驗(yàn)證和權(quán)限的把握一定要考慮詳細(xì),如果出了問(wèn)題就不僅僅是調(diào)程序了,就需要調(diào)思路了。希望大家指點(diǎn),如果大家有更好的建議和意見(jiàn)可以提出來(lái),大家一起研究。
轉(zhuǎn)載于:https://blog.51cto.com/mixangel/54437
總結(jié)
以上是生活随笔為你收集整理的自动生成想“变”就“变”的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 来我国,正月没住到头。打2字词
- 下一篇: 怎么画综合布线图