使用c#在两个日期之间插入mysql数据
Posted
技术标签:
【中文标题】使用c#在两个日期之间插入mysql数据【英文标题】:Inserting mysql datas between 2 dates using c# 【发布时间】:2018-07-30 08:09:55 【问题描述】:<asp:TextBox ID="txtstartdate" class="form-control" autocomplete="off" CssClass="datepicker1" runat="server"></asp:TextBox>
<asp:TextBox ID="txtenddate" class="form-control" autocomplete="off" CssClass="datepicker2" runat="server"></asp:TextBox>
<asp:TextBox id="txtreason" TextMode="multiline" runat="server" />
<asp:Button ID="submit" CssClass="login" runat="server" Text="Submit" OnClick="Submit_click" />
使用 Submit_click 我想在 txtstartdate 和 txtenddate 上选择的 2 个日期之间将数据插入表中。 txtreason 应该对表格上的所有日期重复。
例如,如果在 txtstartdate 和 txtenddate 上选择日期 07/30/2018 和 08/04/2018 并输入“hello”作为 txtreason 的原因,我应该得到 07/30/2018 和 08/04/ 之间的所有日期数据表的 ldate 列中的 2018 和 hello 应该在每个单独的日期在 reason 列上重复 6 次。 如果您更改日期格式,下面的方法就像一个魅力。
protected void Submit_click(object sender, EventArgs e)
DateTime startdate = Convert.ToDateTime(txtstartdate.Text);
DateTime enddate = Convert.ToDateTime(txtenddate.Text);
for (DateTime date = startdate; date <= enddate; date = date.AddDays(1))
try
string MyConString = "SERVER=localhost;DATABASE=mydb;UID=myid;PASSWORD=abc123;";
mysqlConnection connection = new MySqlConnection(MyConString);
string cmdText = "INSERT INTO approved(agentlogin ,leavetype ,date ,time, reason)VALUES ( @login, @type, @date, 'Full day', @reason)";
MySqlCommand cmd = new MySqlCommand(cmdText, connection);
cmd.Parameters.AddWithValue("@login", Label1.Text);
cmd.Parameters.AddWithValue("@type", ddlleavetype.Text);
cmd.Parameters.AddWithValue("@date", date);
cmd.Parameters.AddWithValue("@reason", txtreason.Text);
connection.Open();
int result = cmd.ExecuteNonQuery();
connection.Close();
//lblError.Text = "Data Saved";
catch (Exception)
Console.Write("not entered");
//lblError.Text = ex.Message;
【问题讨论】:
你的 MySQL 代码在哪里? 有可能吗? - 是的,可能,但我看到这里发生了很多危险且可以说是坏事,我不知道我会去哪里开始清理它。 @bradbury9 来解决 OP 提到的问题,你不需要知道表格是什么样子的。 @TimothyGroote OK,然后像 tsql 的递归 CTE + 插入。 你可以用一个insert
命令插入多条记录,语法是insert into tableName (select that returns multiple rows)
。这里的技巧是在select
部分中使用递归CTE,检查mysql CTE doc 以获取两个给定日期之间的记录,每天一个。顺便说一句,将其发布为评论而不是答案,因为这不是实际查询,只是一些指导。
【参考方案1】:
这就是为什么您应该使用模型,并使用正确的类型,而不是将所有内容都保留为 string
。
虽然不完美,但朝着正确方向迈出的一步应该是这样的: (请记住,我并没有解决每一个问题。还有大量需要改进的空间)
public class DateRangeModel
public DateTime From get; set;
public DateTime To get; set;
public IEnumerable<DateTime> DaysInRange
get
for(DateTime date = StartDate; date.Date <= EndDate.Date; date = date.AddDays(1))
yield date;
public DateRangeModel(string from, string to)
From = GetDate(from);
To = GetDate(to);
private static DateTime GetDate(string string_date)
DateTime dateValue;
if (DateTime.TryParse(string_date, out dateValue))
return dateValue;
else
throw new Exception("Unable to convert '0' to a date.", string_date);
protected void Submit_click(object sender, EventArgs e)
DateRangeModel dateRange = new DateRangeModel(txtstartdate.Text, txtenddate.Text);
OleDbConnection scn = new OleDbConnection();
scn.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=/mysource;";
foreach(var dt in dateRange.DaysInRange)
OleDbCommand scmd = new OleDbCommand("Insert query", scn);
scmd.CommandType = CommandType.Text;
scmd.Parameters.Clear();
scmd.Parameters.AddWithValue("@date1", dt);
scmd.Parameters.AddWithValue("reason", txtreason);
//etc (finish your insert stmt here).
【讨论】:
谢谢,但我怎样才能将值放入插入查询中? @PrakashKumar 这是一个不同的问题,您现在在问如何将插入到表中。您应该注意到我们只知道实际的表名和列名。 @bradbury9:当您更改代码时,请确保事先对其进行测试。您的编辑两次写入 To 但从未写入 From。 @BDL 感谢您的警告,请随时拒绝编辑或更正变量分配。【参考方案2】:使用以下方法更改日期格式。希望这会有所帮助
protected void Submit_click(object sender, EventArgs e)
DateTime startdate = Convert.ToDateTime(txtstartdate.Text);
DateTime enddate = Convert.ToDateTime(txtenddate.Text);
for (DateTime date = startdate; date <= enddate; date = date.AddDays(1))
try
var shtdate = date.ToShortDateString();
string MyConString = "SERVER=localhost;DATABASE=mydb;UID=myid;PASSWORD=abc123;";
MySqlConnection connection = new MySqlConnection(MyConString);
string cmdText = "INSERT INTO approved(agentlogin ,leavetype ,date ,time, reason)VALUES ( @login, @type, @date, 'Full day', @reason)";
MySqlCommand cmd = new MySqlCommand(cmdText, connection);
cmd.Parameters.AddWithValue("@login", Label1.Text);
cmd.Parameters.AddWithValue("@type", ddlleavetype.Text);
cmd.Parameters.AddWithValue("@date", shtdate);
cmd.Parameters.AddWithValue("@reason", txtreason.Text);
connection.Open();
int result = cmd.ExecuteNonQuery();
connection.Close();
//lblError.Text = "Data Saved";
catch (Exception)
Console.Write("not entered");
//lblError.Text = ex.Message;
【讨论】:
以上是关于使用c#在两个日期之间插入mysql数据的主要内容,如果未能解决你的问题,请参考以下文章