我正在尝试弄清楚如何让我的应用程序在它从我的数据库中检索到的指定日期/时间发送通知。
它不需要做任何复杂的事情,比如弹出/声音通知,它只需要发送一条简单的消息。
到目前为止我的代码。
SqlConnection connectionString = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Users\Goeli\Desktop\Feedr OIS\DateTimePlanner2\DateTimePlanner2\Database1.mdf;Integrated Security=True");
public Form1()
{
InitializeComponent();
dateTimePicker1.Format = DateTimePickerFormat.Custom;
timePicker2.Format = DateTimePickerFormat.Custom;
dateTimePicker1.CustomFormat = "MM/dd/yyyy";
timePicker2.CustomFormat = "HH:mm";
DisplayData();
}
private void button1_Click(object sender, EventArgs e)
{
try
{
if (textBox1.Text != "")
{
SqlCommand cmd = new SqlCommand("INSERT INTO dbo.Planner(Name, Date, Time) VALUES(@Name, @Date, @Time)", connectionString);
connectionString.Open();
cmd.Parameters.AddWithValue("@Name", textBox1.Text);
cmd.Parameters.AddWithValue("@Date", dateTimePicker1.Text);
cmd.Parameters.AddWithValue("@Time", timePicker2.Text);
cmd.ExecuteNonQuery();
connectionString.Close();
MessageBox.Show("Successfully Planned");
DisplayData();
//ClearData();
}
else
{
MessageBox.Show("Please provide a name");
}
}
catch (Exception)
{
MessageBox.Show("Cannot have duplicate name");
}
}
private void DisplayData()
{
connectionString.Open();
DataTable dt = new DataTable();
SqlDataAdapter adapt = new SqlDataAdapter("select * from dbo.Planner", connectionString);
adapt.Fill(dt);
dataGridView1.DataSource = dt;
connectionString.Close();
}
private void button2_Click(object sender, EventArgs e)
{
SqlCommand cmd = new SqlCommand("DELETE FROM dbo.Planner WHERE Name=@Name", connectionString);
try
{
if (textBox1.Text != "")
{
connectionString.Open();
cmd.Parameters.AddWithValue("@Name", textBox1.Text);
cmd.ExecuteNonQuery();
connectionString.Close();
MessageBox.Show(" Successfully Deleted");
DisplayData();
}
else
{
MessageBox.Show("Please provide the name to delete");
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
}
最佳答案
作为我建议使用的最快和最简单的解决方案
- 引发事件的计时器,例如每分钟(或每秒,取决于您需要实现的粒度)并读取时间表 - 日期\时间和消息的集合。
- 一个单独的线程(或计时器)每 X 秒读取一次(轮询)您的数据库并维护计划(添加\删除事件)。
需要涉及一些简单的同步。
作为替代方案,您可以使用第三方库,例如 FluentScheduler .如果您需要跨多个应用程序实例的一致性,对于更重量级的解决方案,请考虑 Quartz.NET
关于c# - 从数据库发送时间/日期通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41364549/