C# 使用c在两个日期之间插入mysql数据
使用提交按钮,我想在txtstartdate和txtenddate上选择的两个日期之间向表中插入数据。txtreason应该对表中的所有日期重复 例如,如果选择txtstartdate和txtenddate上的日期2018年7月30日和2018年8月4日,并输入hello作为txtreason的原因,我应该在数据表的ldate列中获得2018年7月30日和2018年8月4日之间的所有日期,并且每个日期的hello应该在reason列中重复6次。 如果您更改日期格式,下面的方法非常有效C# 使用c在两个日期之间插入mysql数据,c#,mysql,oledb,C#,Mysql,Oledb,使用提交按钮,我想在txtstartdate和txtenddate上选择的两个日期之间向表中插入数据。txtreason应该对表中的所有日期重复 例如,如果选择txtstartdate和txtenddate上的日期2018年7月30日和2018年8月4日,并输入hello作为txtreason的原因,我应该在数据表的ldate列中获得2018年7月30日和2018年8月4日之间的所有日期,并且每个日期的hello应该在reason列中重复6次。 如果您更改日期格式,下面的方法非常有效 <a
<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" />
这就是为什么你应该使用模型,并使用适当的类型,而不是保持一切一串 虽然不是完美的,但朝着正确方向迈出的一步应该是这样的: 记住,我并没有解决每一个问题。还有很大的改进空间
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;
}
}
}
使用以下方法更改日期格式。希望这有帮助
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).
}
}
你的MySQL代码在哪里?有可能吗是的,可能是这样,但我看到这里发生了很多危险的和可以说是不好的事情,我不知道从哪里开始清理。@bradbury9要解决OP提到的问题,你不需要知道表是什么样子。@TimothyGroote好的,就像tsql的递归CTE+insert。你只需一个insert命令就可以插入多条记录,语法是insert into tableName select,返回多行。这里的技巧是在select部分使用递归CTE,检查以获取两个给定日期之间的记录,每天一个。顺便说一句,将此作为注释而不是答案发布,因为这不是一个实际的查询,只是一些指导。谢谢,但我如何才能将值插入到insert查询中?@PrakashKumar这是另一个问题,您现在问的是如何在表中插入。您应该注意到,我们对acual表和列名一无所知。@bradbury9:当您更改代码时,请确保事先对其进行测试。您的编辑向写入两次,但从不从中写入。@BDL感谢您的警告,请随时拒绝编辑或更正变量赋值。
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;
}
}
}