Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用c在两个日期之间插入mysql数据_C#_Mysql_Oledb - Fatal编程技术网

C# 使用c在两个日期之间插入mysql数据

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

使用提交按钮,我想在txtstartdate和txtenddate上选择的两个日期之间向表中插入数据。txtreason应该对表中的所有日期重复

例如,如果选择txtstartdate和txtenddate上的日期2018年7月30日和2018年8月4日,并输入hello作为txtreason的原因,我应该在数据表的ldate列中获得2018年7月30日和2018年8月4日之间的所有日期,并且每个日期的hello应该在reason列中重复6次。 如果您更改日期格式,下面的方法非常有效

<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;
        }
    }
}