前提・実現したいこと
visual studio 2017 c#
SQL Server Management Studio 17
名前と生年月日と年齢をSQLに登録するシステムを作っています。
生年月日...MaskedTextBoxコントロールを使用しています。
___/_/_/←マスクの設定でこちらを定形にしています。
SQLにはdate型(NULL許容)で登録されるようになっています。
発生している問題・エラーメッセージ
生年月日を___/_/_/未入力の状態で登録した時にエラーが発生します。
文字列から日付と時刻、またはそのいずれかへの変換中に、変換が失敗しました。
試したこと
MaskedTextBoxではなくTextBoxに変えて未入力した場合を試してみました。
するとNULL値ではなく、1900-01-01とSQLに登録されます。
調べてみると、date型はブランクで登録できない(?)みたいでした。
上記で
MaskedTextBoxの場合はスラッシュが邪魔をしてエラーが発生しているのだと分かったのですが
どうすれば、MaskedTextBox(___/_/_/)を用いて
SQLのdate型にNULL値で登録できるのでしょうか?
もしくは、TextBoxを使って日付を入力したときにだけスラッシュが出現するというイベントは作れないでしょうか?
該当のソースコード
年齢計算ボタン...ButtonAgeCal
生年月日テキスト...MTxtBirthDAy
年齢...TxtAge
C#
1 2/// 生年月日から年齢を計算 3private void ButtonAgeCal_Click(object sender, EventArgs e) 4{ 5 DateTime BD; 6 7 if (!DateTime.TryParseExact(MtxtBirthDay.Text, "yyyy/MM/dd", null, System.Globalization.DateTimeStyles.None, out BD)) 8 { 9 MessageBox.Show("生年月日を正しく入力してください"); 10 } 11 else 12 { 13 int age = DateTime.Today.Year - BD.Year; 14 if (BD > DateTime.Today.AddYears(-age)) age--; 15 16 TxtAge.Text = age.ToString(); 17 } 18} 19
補足情報(FW/ツールのバージョンなど)
初心者でまだ理解も浅いのでよろしくお願いします。