-2

私のデータベースには、「日付」データ型の列があります。

つまり、YYYY-MM-DD形式の日付のみが使用されます。

私の質問は、

現在の日付を C# からデータベースに送信するにはどうすればよいですか?

同様に、PHPMyAdmin のクエリで CURDATE() を使用すると、希望する形式で今日の日付が返されます。しかし、情報をデータベースに送信するときに、C# Windows フォームで「CURDATE()」を使用するにはどうすればよいでしょうか。

                string query = "INSERT INTO player (date, name, level, experience) " +
                                 "VALUES ('" + DateTime.Today + "','" +
                                         getPlayerName(Tibia.Handle, (BattleList_Start + Base + (BattleList_Step * playerIndex) + 4)) + "'," +
                                         ReadInt32(LvlAdr + Base, 4, Tibia.Handle) + "," +
                                         ReadInt32(XpAdr + Base, 4, Tibia.Handle) + ")";
4

1 に答える 1

13

さて、私のデータベースには、「日付」データ型の列があります。つまり、YYYY-MM-DD 形式の日付のみが使用されます。

いいえ、そうではありません。これは、値が単なる日付であることを意味します。データベースの値は日付であり、「特定の形式の日付」ではありません。保存されたデータと、表示または入力に使用できるテキスト表現との違いを理解することは非常に重要です。

私の質問は、現在の日付を C# からデータベースに送信するにはどうすればよいですか?

パラメータ化された SQL を使用し、パラメータの値を に設定しますDateTime.Today文字列表現はまったく必要ありません。次のようなものです:

// Work out the values beforehand
string name = getPlayerName(Tibia.Handle, 
                (BattleList_Start + Base + (BattleList_Step * playerIndex) + 4));
int level = ReadInt32(LvlAdr + Base, 4, Tibia.Handle);
int experience = ReadInt32(XpAdr + Base, 4, Tibia.Handle);

// Now do the database operations
string sql = @"INSERT INTO player (date, name, level, experience) 
               VALUES (@Date, @Name, @Level, @Experience)";
using (var conn = new MySqlConnection(...))
{
    conn.Open();
    using (var cmd = new MySqlCommand(sql, conn))
    {
        cmd.Parameters.Add("@Date", MySqlDbType.Date).Value = DateTime.Today;
        cmd.Parameters.Add("@Name", MySqlDbType.VarChar).Value = name;
        cmd.Parameters.Add("@Level", MySqlDbType.Int32).Value = level;
        cmd.Parameters.Add("@Experience", MySqlDbType.Int32).Value = experience;
        int rows = cmd.ExecuteNonQuery();
        // TODO: Validation of result (e.g. that 1 row was inserted)
    }
}

システムのデフォルトのタイムゾーンを使用して、「今」が何を意味するかを判断することに注意してください。別のタイムゾーンが必要な場合は、より多くの情報を提供してください。

または、ORM (Entity Framework、NHibernate など) を使用する場合、通常これは単純化され、SQL を直接指定する必要はありません。ORM はパラメーターに関して自動的に機能するはずです。

于 2013-07-02T18:42:42.027 に答える