0

書式設定された日時変数を SQL Server に渡す作業を行っています。日付は 2 つの異なるコントロールに由来するため、日付と時刻を連結する必要があります。コードは正常に動作しているようで、2 つの文字列が結合されると、DateTime として解析されます。

問題は、SQL Server に移行すると、時刻の部分が失われ、列が(たとえば) とは対照的に表示yyyy-mm-dd hh:mm:ss.fffされることです。2012-09-03 00:00:00.0002012-09-03-12 1:23:45:678

これが私のコードです。テストのために、時間をハードコードされobjInfo.SemesterEnrollStartた変数に置き換えました。これはDateTime変数です。また、コントロールdpEnrollStartDatePicker.

DateTime semDate = Convert.ToDateTime(dpEnrollStart.SelectedDate);
string semTime = "12:34";
DateTime dtp = DateTime.ParseExact(semDate.ToShortDateString() + " " + semTime, "MM/dd/yyyy hh:mm", null);
objInfo.SemesterEnrollStart = dtp;  

本当にありがとう!

編集:だから、ストアド プロシージャを呼び出すために使用している c# は次のとおりです。

objInfo.SemesterQuarter =  ddl_SemQuarter.SelectedValue;
objInfo.SemesterYear = ddl_SemYear.SelectedValue;
objInfo.SemesterStart = Convert.ToDateTime(dpSemStart.SelectedDate);
objInfo.SemesterEnd = Convert.ToDateTime(dpSemEnd.SelectedDate);

DateTime semDate = Convert.ToDateTime(dpEnrollStart.SelectedDate);
string semTime = "12:34:00.000";
objInfo.SemesterEnrollStart = DateTime.ParseExact(semDate.ToShortDateString() + " " + semTime, "MM/dd/yyyy HH:mm:ss.fff", null);                                                        

objInfo.SemesterEnrollEnd = Convert.ToDateTime(dpEnrollEnd.SelectedDate);
objInfo.PriorityRegDate = Convert.ToDateTime(dpPriRegDate.SelectedDate);
objInfo.AgeCutoffDate = Convert.ToDateTime(dpAgeCutoffDate.SelectedDate);
lblTSMessage.Text = objInfo.SemesterEnrollStart.ToString();
objManager.AddNewSemester(objInfo);
4

1 に答える 1

1

問題は、ParseExact で使用している形式にあります。

 MM/dd/yyyy hh:mm

したがって、秒とミリ秒の部分を意図的に破棄しています。

代わりに、: で日付を解析する必要がありますが、semTime 変数で(ss) と(fff)yyyy-MM-dd HH:mm:ss.fffをキャプチャする必要があります。そうしないと、メソッドが失敗します。secondsmillisecondsParseExact

一例:

string s = "01/01/2012 11:23";
//FAILS because there's not ss and fff part 
DateTime dtp = DateTime.ParseExact(s, "MM/dd/yyyy hh:mm:ss.fff", null);

string s = "01/01/2012 11:23:12.678";
//Works because there's a ss and fff part
DateTime dtp = DateTime.ParseExact(s, "MM/dd/yyyy hh:mm:ss.fff", null);
于 2012-09-05T18:06:31.230 に答える