【问题标题】:C# Populate Database with data with 2 datesC# 使用具有 2 个日期的数据填充数据库
【发布时间】:2017-08-01 19:14:57
【问题描述】:

我正在创建一个考勤监控系统,它可以设置休假,但只有一个日期,我想要的输出是我可以设置两个日期的休假。例如,从 3 月 6 日到 3 月 9 日,它会在数据库中插入值是 march6、march 7、march8 和 9 的休假。每个日期都会创建一个添加行

这是我的代码:

private void setleave()
{
    OleDbCommand command = new OleDbCommand();
    command.Connection = connection;
    command.CommandText = "INSERT INTO [TimeinTimeout](EmployeeID, Firstname, Lastname, InDate, Remarks) VALUES (@1,@2,@3,@4,@5)";
    command.Parameters.Clear();
    command.Parameters.AddWithValue("@1", textBox1.Text);
    command.Parameters.AddWithValue("@2", dataGridView1.Rows[0].Cells[1].Value);
    command.Parameters.AddWithValue("@3", dataGridView1.Rows[0].Cells[2].Value);
    command.Parameters.AddWithValue("@4", dateTimePicker1.Value.ToShortDateString());
    command.Parameters.AddWithValue("@5", textBox2.Text);
    command.ExecuteNonQuery();
    MessageBox.Show("Data Saved!");
}

private void button1_Click(object sender, EventArgs e) { 尝试 {

            connection.Open();
            OleDbCommand command = new OleDbCommand();
            command.Connection = connection;
            command.CommandText = @"    SELECT EmployeeID, Firstname, Lastname 
                                        FROM tblEmployee 
                                        WHERE EmployeeID = @1";
            command.Parameters.AddWithValue("@1", textBox1.Text);
            var fromDate = dateTimePickerFrom.Value;
            var toDate = dateTimePickerTo.Value;
            for(DateTime offDate = fromDate; offDate.Date <= toDate.Date; offDate = offDate.AddDays(1))
            {
              SetLeave(offDate);
            }
            reader = command.ExecuteReader();


            if (reader.Read())
            {
                if (MessageBox.Show("Are you sure you want to set Employee as Leave?", "", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.Yes)
                {
                dataGridView1.Rows[0].Cells[0].Value = reader[0].ToString();
                dataGridView1.Rows[0].Cells[1].Value = reader[1].ToString();
                dataGridView1.Rows[0].Cells[2].Value = reader[2].ToString();
                dataGridView1.Rows[0].Cells[3].Value = dateTimePicker1.Value.ToString();
                setleave();
                } 
            }

            else
            {
                MessageBox.Show("Invalid Employee ID!");
            }
            connection.Close();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }

【问题讨论】:

    标签: c# ms-access insert


    【解决方案1】:

    您需要引入另一个日期选择器,以便用户可以选择 FromTo 休假日期。

    那么你需要遍历日期并调用你的方法:

    var fromDate = dateTimePickerFrom.Value;
    var toDate = dateTimePickerTo.Value;
    for(DateTime offDate = fromDate; offDate.Date <= toDate.Date; offDate = offDate.AddDays(1))
    {
        SetLeave(offDate);
    }
    

    并对您的方法进行以下更改:

    private void Setleave(DateTime offDate)
    {
        OleDbCommand command = new OleDbCommand();
        command.Connection = connection;
        command.CommandText = "INSERT INTO [TimeinTimeout](EmployeeID, Firstname, Lastname, InDate, Remarks) VALUES (@1,@2,@3,@4,@5)";
        command.Parameters.Clear();
        command.Parameters.AddWithValue("@1", textBox1.Text);
        command.Parameters.AddWithValue("@2", dataGridView1.Rows[0].Cells[1].Value);
        command.Parameters.AddWithValue("@3", dataGridView1.Rows[0].Cells[2].Value);
    
        // This is the changed line
        command.Parameters.AddWithValue("@4", offDate.ToShortDateString());
    
        command.Parameters.AddWithValue("@5", textBox2.Text);
        command.ExecuteNonQuery();
        MessageBox.Show("Data Saved!");
    }
    

    尝试使用 .NET 命名约定。我已将您的方法名称从 setLeave 更改为 SetLeave,以遵循使用 Pascal 大小写作为方法名称的约定。

    另外,进行验证以确保用户在 To 日期选择器中选择的日期不早于在 From 日期选择器中选择的值。

    【讨论】:

    • 我应该把 varfromdate 和 vartodate 代码放在哪里?我在设置离开按钮中嵌入了数据库验证并调用了 SetLeave() 方法,如何进行验证以确保用户在 To datepicker 中选择的日期不早于 From datepicker 中选择的值?原谅我,我只是一个新手C#程序员
    • fromDate 等代码放入按钮处理程序中。您也可以将验证代码放在按钮处理程序中。
    • 这行得通吗? var timeSpan1 = dateTimePicker1.Value - dateTimePicker2.Value; if (Math.Abs​​(timeSpan1.TotalSeconds) > 1) { MessageBox.Show(dateTimePicker1.Value + " 与 " + dateTimePicker2.Value); } else { MessageBox.Show(dateTimePicker1.Value + " 与 " + dateTimePicker2.Value); }
    • if (dateTimePicker2.Value &lt; dateTimePicker1.Value) { MessageBox.Show("from must be before to or whatever you want to show the user");}。如果日期相同,那没关系。这意味着一天。
    • 我的代码不起作用按钮处理程序在哪里?是button1_Click吗?它在那里不起作用
    猜你喜欢
    • 2016-06-04
    • 2021-08-03
    • 1970-01-01
    • 1970-01-01
    • 2019-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-15
    相关资源
    最近更新 更多