将c#的datetimepicker存储到mysql数据库中

时间:2013-03-05 13:03:02

标签: c# datetimepicker

您好我想将datetimepicker值存储到mysql数据库中,我的代码如下所示

dtpDate = datetimepicker1.value.date;
dtpTime = datetimepicker2.value.Timeofday;
MySqlCommand cmd = new MySqlCommand("INSERT INTO schedule_days(schedule_name,start_time,status,days,start_date,connector_id) VALUES ('" + name + "','" + dtpTime + "','" + s + "','" + day + "','"+dtpDate+"','" + chkArray[i].Tag + "')", con);
con.Open();
cmd.ExecuteNonQuery();
con.Close();

但数据库中没有存储任何值 并且在那个地方无法读取数据。 可能是什么问题?

3 个答案:

答案 0 :(得分:3)

由于您的查询在dtpTime和dtpDate字段中存在错误,因此未在MySQL数据库中输入值。

你用dtpTime.Value.TimeofDay和dtpDate.Value.Date替换它,新的查询将是这样的

dtpDate = datetimepicker1.value.date;
dtpTime = datetimepicker2.value.Timeofday;
MySqlCommand cmd = new MySqlCommand("INSERT INTO schedule_days(schedule_name,start_time,status,days,start_date,connector_id) VALUES ('" + name + "','" + dtpTime.Value.TimeofDay + "','" + s + "','" + day + "','"+dtpDate.Value.Date.ToString("yyyy-MM-dd HH:mm")+"','" + chkArray[i].Tag + "')", con);
con.Open();
cmd.ExecuteNonQuery();
con.Close();

答案 1 :(得分:1)

嗯,可能不是导致问题的原因(有没有例外?ExecuteNonQuery会返回什么?)但你应该肯定不是像这样建立你的SQL。它会导致SQL injection attacks以及数据转换问题。

相反,您应该使用参数化SQL:

using (MySqlConnection conn = new MySqlConnection(...))
{
    conn.Open();
    using (MySqlCommand cmd = new MySqlCommand(
       "INSERT INTO schedule_days(schedule_name,start_time,status,days,start_date,connector_id) " +
       "VALUES (@name, @time, @status, @days, @date, @connector)", conn))
    {
        cmd.Parameters.Add("@name", MySqlDbType.VarChar).Value = name;
        cmd.Parameters.Add("@time", MySqlDbType.Time).Value = dtpTime;
        cmd.Parameters.Add("@status", MySqlDbType.VarChar).Value = s;
        cmd.Parameters.Add("@days", MySqlDbType.Int32).Value = day;
        cmd.Parameters.Add("@date", MySqlDbType.Date).Value = dtpDate;
        cmd.Parameters.Add("@connector", MySqlDbType.VarChar).Value = chkArray[i].Tag;

        int insertedRows = cmd.ExecuteNonQuery();
        // TODO: Validate that insertedRows is 1?
    }
}

我已经猜到了数据类型 - 请根据您的实际数据库进行检查。

答案 2 :(得分:0)

使用NuGet包MySql.Data 6.6.4

目前,MySqlParameter不支持未命名的参数。参数必须以?开头。

示例:

command.Parameters.AddWithValue("?Parameter", value);

这样的事情应该有效。避免与Sql串联,因为这会导致安全风险。

dtpDate = datetimepicker1.value.date.ToString("yyyy-MM-dd HH:mm"); //Formatted Date for MySql
dtpTime = datetimepicker2.value.Timeofday;

using(var connection = new MySqlConnection(connectionString))
{
    using(var command = connection.CreateCommand())
    {
        command.CommandText = "INSERT INTO schedule_days(schedule_name,start_time,status,days,start_date,connector_id) VALUES ( ?ScheduleName, ?StartTime, ?Status, ?Days, ?StartDate, ?ConnectorId )";
        command.Parameters.AddWithValue("?ScheduleName", name);
        command.Parameters.AddWithValue("?StartTime", dtpTime);
        command.Parameters.AddWithValue("?Status", s);
        command.Parameters.AddWithValue("?Days", day);
        command.Parameters.AddWithValue("?StartDate", dtpDate);
        command.Parameters.AddWithValue("?ConnectorId", chkArray[i].Tag);

        connection.Open();
        command.ExecuteNonQuery();
    }
}