2017-05-12 35 views
-3

我想從用戶輸入的日期自動生成Id。 實施例:日期是2017年12月5日比ID必須170001或2014年5月10日比ID必須140001如何在asp.net中自動生成id號c#

 private void autogeneratedocno() 
 
     { 
 
     con.Open(); 
 
     string check="select count(Doc_no) from  
 
     complaint"; 
 
     SqlCommand cmd2 = new SqlCommand(check,con); 
 
     int a =Convert.ToInt32(cmd2.ExecuteScalar()); 
 

 
     string date = txtdate.Text.ToString(); 
 
     string year = date.Substring(8, 2); 
 
     //string[] arrDate = date.Split('/'); 
 

 
     //string day = arrDate[0].ToString(); 
 
     //string month = arrDate[1].ToString(); 
 
     //string year = arrDate[2].ToString(); 
 
     //string y = year.Substring(2, 2); 
 

 
     if (a == 0) 
 
     { 
 
      
 
      txtdocno.Text = string.Concat(year.ToString() 
 
      + "00000"); 
 

 
     } 
 
     else 
 
     { 
 
      string count = "select ISNULL(MAX(Doc_no),0)+1 
 
      from complaint";        
 
      SqlCommand cmd = new SqlCommand(count, con); 
 
      int doc_no = 
 
      Convert.ToInt32(cmd.ExecuteScalar()); 
 
      txtdocno.Text = doc_no.ToString(); 
 
     
 
     } 
 
     con.Close(); 
 
     } 
 
     
 
    

通過使用上述代碼。我能夠生成2017年的ID,但是當我改變年頭兩個數字不會改變。

請給我建議改變爲自動生成ID

+1

歡迎SO,這個問題太廣,請花一分鐘閱讀[如何問一個問題(https://stackoverflow.com/help/how-to-ask)也許[寫作完美問題,](https://codeblog.jonskeet.uk/2010/08/29/writing-the-perfect-question/),並嘗試寫一個更好的問題,詳細說明更多要求,告訴我們你已經嘗試了什麼,以及你在哪裏卡住了。祝你好運! – ThrowingSpoon

+0

你可以請添加一些更多的細節。爲什麼必須12/05/2017 = 170001,如果兩個人輸入相同的日期,Id應該一樣嗎? – Scrobi

+0

不,id始終自動遞增。 –

回答

0

private void autogeneratedocno() 
 
    { 
 

 

 
     string str1 = txtdate.Text; 
 
     string[] s1 = str1.Split('/'); 
 
     str1 = s1[1].ToString() + "/" + s1[0].ToString() + 
 
     "/" + s1[2].ToString(); 
 

 
     string yy = s1[2].ToString(); 
 
     string mm = s1[1].ToString(); 
 
     string dd = s1[0].ToString(); 
 

 
     int y = Convert.ToInt32(yy); 
 
     int m = Convert.ToInt32(mm); 
 

 
     string z = yy.Substring(2,2); 
 

 
     string sqlno =" selectisnull(max(substring 
 
     (doc_no,3,5)),0)+1 from complaint where 
 
     substring(doc_no,1,2) = '"+z+"'"; 
 
     con.Open(); 
 
     SqlCommand cmd = new SqlCommand(sqlno, con); 
 
     string getno = 
 
     Convert.ToString(cmd.ExecuteScalar()); 
 
     con.Close(); 
 
     string Inquiry_code = yy.Substring(2, 2) + 
 
     getno.ToString().PadLeft(5, '0'); 
 
     txtdocno.Text = Inquiry_code; 
 

 
    }

終於得到了答案。

,如果你有其他的想法做到這一點請建議。

+0

我會建議使用正確的數據類型爲數據。所以使用DateTime作爲日期。 但上面的代碼應該做你想要的東西。你可能想看看用戶輸入一個你不期待的格式的日期或者根本不是日期的字符串時會發生什麼。 – Scrobi

+0

thanx您的建議@Scrobi。我會記住....也是我有另一個問題,請在我的下一個問題中提供幫助 –

0

lbldate.Text = Convert.ToDateTime(DateTime.Now.AddYears(-3))的ToString( 「DD/MM/YYYY」);

string Year = lbldate.Text.Substring(8, 2); 
    lblYear.Text = Year; 
0

這可能會幫助您解決您遇到的問題,但您可能會發現您會遇到其他問題。

我選擇字符串輸入轉換爲DateTime,因爲你不能保證什麼,用戶將輸入。如果他們輸入日期如2017-01-01會怎麼樣。

舉例來說,這將在2009年失效的int.parse將刪除前導零。

string date = "01/01/2017"; //example date 
DateTime d = DateTime.Parse(date); //convert string into datetime 
var i = int.Parse(d.ToString("yy00000")); //format and convert to int 

int docno = i + count 

你也許應該看看從數據庫中生成一個數字或可能使用GUID