3

您好,我想将 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();

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

4

3 回答 3

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();
于 2013-03-06T04:55:29.483 回答
1

好吧,这可能不是问题的原因(有任何例外吗?ExecuteNonQuery返回什么?)但您绝对不应该像这样构建您的 SQL。它会导致SQL 注入攻击,以及数据转换问题。

相反,您应该使用参数化 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?
    }
}

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

于 2013-03-05T13:15:01.317 回答
0

使用 NuGet 包MySql.Data 6.6.4

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

例子:

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();
    }
}
于 2013-03-05T13:15:22.453 回答