您好我想将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();
但数据库中没有存储任何值 并且在那个地方无法读取数据。 可能是什么问题?
答案 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();
}
}