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 は名前のないパラメーターをサポートしていません。パラメータは . で始まる必要があります?

例:

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 に答える