-2

//やあ!DatePicker を使用して Date を挿入しようとすると、問題が発生します

       DateTime birth_date=Convert.ToDateTime(datePickerEBirthDate.SelectedDate);
            SqlConnection SQLconnection = new SqlConnection(@"Server=MyMachineName\SQLEXPRESS;Database=MyDataBase;Integrated Security=SSPI");
            SqlCommand command = SQLconnection.CreateCommand();
            SQLconnection.Open();
            command.CommandText = "INSERT INTO courses " +
            "(name, birthdate) VALUES " +
            "(@name, @birthdate)";
            command.Parameters.AddWithValue("@name", txtName.Text);
            command.Parameters.AddWithValue("@birthdate", birth_date);
            command.ExecuteNonQuery();
        SQLconnection.Close();

//そして、これはエラーメッセージです ここに画像の説明を入力

4

3 に答える 3

1

txtName.TextTextBox.Text プロパティ ( ) を取得するのと同じように、 DatePicker.SelectedDateプロパティ ( dpSBirthDate.SelectedDate) を取得する必要があります。DataContext代わりに、何らかの理由でを変換しようとしていますか? dpSBirthDate.SelectedDateまた、 DateTime オブジェクトが返されるため、Convert.ToDateTime(...) 呼び出しを取り除くことができます。


更新 (これは完全に修正されたコード セクションです):

var name = txtName.Text;
var birthdate = dpSBirthDate.SelectedDate;

using (var connection = new SqlConnection(@"Server=MyMachineName\SQLEXPRESS;Database=MyDataBase;Integrated Security=SSPI")
using (var command = connection.CreateCommand())
{
    command.CommandText = "INSERT INTO courses " +
                          "(name, birthdate) VALUES " +
                          "(@name, @birthdate)";

    if (name == null)
        throw new Exception("Name cannot be null.");
    if (!birthdate.HasValue)
        throw new Exception("Birthdate must contain a value.");

    command.Parameters.AddWithValue("@name", name);
    command.Parameters.AddWithValue("@birthdate", birthdate.Value);
    connection.Open();
    command.ExecuteNonQuery();
}

このコードが失敗した場合、その理由が表示されます...名前または生年月日のいずれかが無効です。生年月日がまだ無効な場合は、このコードを実行する前に、dpSBirthDate ( DatePicker) が正しい DateTime に設定されていることを確認する必要があります。それが役立つことを願っています。

また、using ステートメントを追加し、例外処理を行い、できるだけ遅く接続を開くことで、コードをクリーンアップしたことにも注意してください。

于 2012-06-07T15:13:00.173 に答える
0

日時型を提供する datePickerEBirthDate.Value を使用する必要があるため、DateTime に変換する必要はありませんが、その時間で終了し、これで検索したくない場合がありますが、それはあなたの好みです。

于 2012-06-07T15:42:12.827 に答える
0

.NET の DateTime は、0001 年 1 月 1 日から 9999 年 12 月 31 日までの日付を格納できます。したがって、解析された生年月日を確認してください。正しいカルチャで日付を解析する必要がありますか?

于 2012-06-07T15:19:37.773 に答える