首页 > 解决方案 > C#如何在每月的第一个日期重置自动增量ID

问题描述

我很难弄清楚我该怎么做。我想做的是..

例如:
日期:2018 年 10 月 1 日至 2018 年 10 月 31 日,有 2 条记录,如您在提供的图像上所见。您可以看到 id 从 001 开始,依此类推。下个月是 11 月.. id 应该重新启动/回到 001 而不是 003。

PS:OrderID 是我数据库中的 VARCHAR 数据类型

在此处输入图像描述 请注意,每个新月都会显示新记录,因此此处看不到过去的记录

我希望有人能帮助我

 public partial class SIMSSupplier : UserControl
{
    ADDPOrders order;     
    public SIMSSupplier()
    {
        InitializeComponent();

    }
    public string ORDERID = "000";
    private void ADDOrder_Click(object sender, EventArgs e)
    {        
        order = new ADDPOrders(this);
        POrderID._OrderID(order.lbl_orderID);
        order.ShowDialog(); 
    }
    private void DateOrder_ValueChanged(object sender, EventArgs e)
    {
        DateBetween._DateOrder(DateOrder, DateOrder, PurchaseOrder);
    }
    private void DateOrder2_ValueChanged(object sender, EventArgs e)
    {
        DateBetween._DateOrder(DateOrder, DateOrder2, PurchaseOrder);
    }      
}


public static class DateBetween
{
    public static void _DateOrder(DateTimePicker DateOrder, DateTimePicker DateOrder2, DataGridView PurchaseOrder)
    {
        using (var con = SQLConnection.GetConnection())
        {
            using (var select = new SqlCommand("Select * from Purchase_Order where Date between @date1 and @date2", con))
            {
                select.Parameters.Add("@date1", SqlDbType.Date).Value = DateOrder.Value;
                select.Parameters.Add("@date2", SqlDbType.Date).Value = DateOrder2.Value;
                using (var sd = new SqlDataAdapter(select))
                {
                    var dt = new DataTable();
                    sd.Fill(dt);
                    PurchaseOrder.DataSource = dt;
                }
            }
        }
    }
}

标签: c#sql-serverwinforms

解决方案


If you have the possibility to change the field type to int is much easier to do this from SQL directly. You can auto increment and change the change the seed value each month with a script like the one below (note it also adds the month number in the beginning, if that's useful for you):

IF (DATEPART(DAY, GETDATE()) = 1)
BEGIN
    DECLARE @reseedValue INT
    SET @reseedValue = CAST(CONCAT(CAST(DATEPART(MONTH, GETDATE()) AS NVARCHAR(4)), '000') AS INT)
    DBCC CHECKIDENT ('[table_name]', RESEED, @reseedValue);
END

推荐阅读