こんにちは。現在、visual studio 2017を使ってc#の勉

Writer: admin Type: booksonline Date: 2019-03-06 00:00
こんにちは。現在、visual studio 2017を使ってc#の勉強をしています。初心者です。ご質問させていただきたいのですが、、生年月日から年齢を計算するボタンを作成しました。生年月日のMaskedTextBox・・・MtxtBirthDay年齢のTextBox・・・TxtAge年齢計算ボタン・・・ButtonAgeCal以下、前回の質問時に作ったコードです private void ButtonAgeCal_Click(object sender, EventArgs e) { // 生年月日が正しく入力されていれば年齢計算 if (MtxtBirthDay.Text.StartsWith(" ")) { MessageBox.Show("生年月日を正しく入力してください"); } else { DateTime BD = DateTime.Parse(MtxtBirthDay.Text); int age = DateTime.Today.Year - BD.Year; if (BD > DateTime.Today.AddYears(-age)) age--; TxtAge.Text = age.ToString(); } }ここで質問が二つあります。①生年月日の値が空白で計算ボタンをクリックすると"生年月日を正しく入力してください"とメッセージボックスが表示されるのですが、ありえない日付や月日だけ(例:1999/99/99、1986/_/_)を入力してクリックすると、文字列は有効なDateTimeではありませんとエラーが発生します。どのようなコードで対処すればよいでしょうか?②現在、初期表示___/_/_/のMaskedTextBoxを使っています。SQL server Management Studioと連携させて個人の生年月日をデータベース登録をしているのですが、(データ型はdate)何も入力しないで登録するとどうも/スラッシュが邪魔をしているみたいで文字列から日付と時刻、またはそのいずれかへの変換中に、変換が失敗しました。とエラーが発生します。なにか対処法はありますでしょうか?拙い文章ですがご教授よろしくお願いいたします。共感した0###そういう場合は、try{}catch(){}で挟んで例外処理で終わらせます。こんな感じです。 private void ButtonAgeCal_Click(object sender, EventArgs e) { // 生年月日が正しく入力されていれば年齢計算 if (MtxtBirthDay.Text.StartsWith(" ")) { MessageBox.Show("生年月日を正しく入力してください"); } else { DateTime BD = DateTime.Now; try { BD = DateTime.Parse(MtxtBirthDay.Text); } catch (Exception ex) { MessageBox.Show("生年月日の入力に誤りがあります"); return; } int age = DateTime.Today.Year - BD.Year; if (BD > DateTime.Today.AddYears(-age)) age--; TxtAge.Text = age.ToString(); } }ナイス0
###ありがとうございます。おかげさまでひとつ目は解決しましたが、ふたつめの生年月日を入力せずに空白状態で登録したいのですが生年月日の入力をTextBoxにして試してみたところ、SQLのdate型は空白で登録すると1900‐01‐01と入力されてしまいます。MaskedTextBoxの/スラッシュを用いてdate型に空白、もしくはNULLを入れたい場合にはどのようなコードを書けばよいかご存知でしたら教えていただけないでしょうかよろしくお願いいたします。
###この回答は投票によってベストアンサーに選ばれました!

 

TAG