0

私は自動生成番号をC#で自動的に作成しています。このPPP-150500001 のようなこのサンプル、PPP-150500002 => PPP-は変更されない文字列、15は年、05は日付、00001は自動生成番号です。PPP-160100001 のように新年を迎えた後に自動番号をリセットするにはどうすればよいですか。

これは私の方法です:

public void NomerUrut()
    {
        long hitung;
        string urut;
        OracleCommand cmd = new OracleCommand();
        OracleDataReader dr;
        cmd.CommandText = @"SELECT NOPERMOHONAN FROM PERMOHONAN WHERE NOPERMOHONAN IN (SELECT MAX(NOPERMOHONAN) 
                            FROM PERMOHONAN) ORDER BY NOPERMOHONAN DESC";
        cmd.Connection = koneksi_manual.con;
        koneksi_manual.con.Open(); //open connection
        dr = cmd.ExecuteReader();
        dr.Read();
        if (dr.HasRows)
        {
            hitung = Convert.ToInt64(dr[0].ToString().Substring(dr["NOPERMOHONAN"].ToString().Length - 5, 5)) + 1;
            string joinstr = "00000" + hitung;
            DateTime dt = DateTime.Now; // take years and date in autonumber
            urut = "PPP-" + dt.ToString("yy") + dt.ToString("MM") + joinstr.Substring(joinstr.Length - 5, 5); 
            //it will show PPP-150500002, PPP-150500003, etc
            //how can i reset this autonumber after get new years like PPP-160100001
        }
        else
        {
            urut = "PPP-150500001"; // first form load will display this default autonumber
        }
        dr.Close();
        txtNoPermohonan.Text = urut; //display auto generate number in a textbox
        koneksi_manual.con.Close(); //close connection
    }

解決しました。

この質問の更新があり、別のクエリを使用して問題を解決できます。私は毎年それをリセットすることができます..これは私の更新コードです:

public static string GenerateKodeUrut()
    {
        string nomor = "";
        string date = DateTime.Now.ToString("yyyy/MM/dd").Substring(2, 2);
        DateTime dt = DateTime.Now;

        OracleCommand cmd = new OracleCommand();
        OracleDataReader dr;
        cmd.CommandText = (@"SELECT NOPERMOHONAN from PERMOHONAN 
                             where substr(NOPERMOHONAN, 5,2) ='" + date + "' ORDER BY cast(substr(NOPERMOHONAN, 9,5) as number) DESC");
        cmd.Connection = koneksi_manual.con;
        dr = cmd.ExecuteReader();
        dr.Read();
        if (dr.HasRows)
        {
            string nmrTerakhir = (dr["NOPERMOHONAN"]).ToString().Remove(0, 8);
            nomor = "PPP-" + date + dt.ToString("MM") + (Convert.ToInt32(nmrTerakhir) + 1).ToString("0000#");
        }
        else
        {
            nomor = "PPP-" + date + dt.ToString("MM") + "00001";
        }
        return nomor;
    }
4

1 に答える 1

1

データベースでフラグを作成して、日付を確認できます。

コードがあなたに私の考えを与えることを願っています

        bool flage = false;
        int checkdate = Convert.ToInt16(dt.ToString("MM"));
        if (checkdate == 12) {
            flage = true;
        }
        if (flage == true && checkdate == 1) { 
        //Write Your Code Here 
            flage = false;
        }
于 2015-05-22T02:03:06.153 に答える