사용자가 "from date"및 "to date"를 입력하고 date-intervall을 기반으로 값 집합을 가져올 수있는 페이지가 있습니다. 유일한 문제는 "현재 날짜"와 함께 작동하지 않는다는 것입니다. 다음과 같이 입력하면 from: 2012-01-01 | to: 2013-07-26
잘됩니다. 그러나 내가 이와 같은 것을 시도 할 때 : from: 2010-07-04 | to: 2012-01-01
나는 그날 이후에도 모든 결과를 얻는다. (2013 년부터).내 databind 메서드의 날짜가 잘못 입력되었습니다.
위의 입력 값 (2010/07/04-2012/01/01)을 사용하여 디버그를 실행했습니다. 여기 디버그에서 관련 값과 함께 내 코드입니다 :
ASPX은
<asp:TextBox ID="VolumeSearchFromDate" runat="server" CssClass="dateTextBox" />
<br />
<asp:TextBox ID="VolumeSearchToDate" runat="server" CssClass="dateTextBox" />
<br />
<asp:Button ID="Button2" runat="server" Text="Search" onclick="btnVolumeSearch_Click" ValidationGroup="validate" />
<br />
<asp:GridView ID="myGv" runat="server"
ShowFooter="True"
AutoGenerateColumns="False" AllowSorting="True" DataKeyNames="id" DataSourceID="myObjectDataSource" >
<Columns>
//my columns here
</Columns>
</asp:GridView>
<asp:ObjectDataSource ID="myObjectDataSource" runat="server"
DeleteMethod="myDeleteMethod" SelectMethod="mySelectMethod"
TypeName="whereItsAt.sqlDataLayer" UpdateMethod="myUpdateMethod">
<DeleteParameters>
<asp:Parameter Name="id" Type="Int32" />
</DeleteParameters>
<SelectParameters>
<asp:Parameter Name="fromDate" Type="DateTime"/>
<asp:Parameter Name="toDate" Type="DateTime"/>
</SelectParameters>
<UpdateParameters>
<asp:Parameter Name="id" Type="Int32" />
<asp:Parameter Name="volume" Type="Int32" />
</UpdateParameters>
</asp:ObjectDataSource>
코드 뒤에 (C#을) 데이터를 검색
//dont know why this is here. The person who wrote the code
//in the first place wrote this and I haven't removed it.
protected void btnVolumeSearch_Click(object sender, EventArgs e)
{
gvVolumeListBindData();
}
private void gvVolumeListBindData()
{
myObjectDataSource.SelectParameters.Remove(myObjectDataSource.SelectParameters["fromDate"]);
string debugString /* "" */= VolumeSearchFromDate.Text.ToString(); /* 2010-04-07 */
string debugString2 /* 2012-01-01 */ = debugString /* "" */;
myObjectDataSource.SelectParameters.Add("fromDate", VolumeSearchFromDate.Text.ToString());
myObjectDataSource.SelectParameters.Remove(myObjectDataSource.SelectParameters["toDate"]);
myObjectDataSource.SelectParameters.Add("toDate", VolumeSearchToDate.Text.ToString());
debugString /* "" */ = VolumeSearchToDate.Text.ToString(); /* 2012-01-01
debugString2 /* 2012-01-01 */ = debugString; /* "" */
gvVolumeList.DataBind();
}
방법 (도 C 번호)
public static DataTable mySelectMethod(DateTime fromDate /* 2010-07-04 00:00:00 */, DateTime toDate /* 2013-07-26 00:00:00 */)
{
DateTime minDate = new DateTime(1900,01,01,00,00,00);
DateTime maxDate = DateTime.Today;
int result = DateTime.Compare(minDate, fromDate);
if (result >= 0)
{
fromDate = minDate;
}
result = DateTime.Compare(maxDate, toDate);
if (result >= 0)
{
toDate = maxDate;
}
//set up connection, call stored procedure etc etc etc.
return table;
}
아무도 여기서 무슨 일이 일어나는지 이해합니까? 내 변수가 무작위로 값을 변경하는 것 같습니다.
편집 문제는 FROMDATE가 너무 작 있다면 난 단지 확인되었다이었다 TODATE 큰이었다, 그러나 경우에 나는 모두를 점검 할 필요가 있었다. Parvez Alam과 Canbek에게 감사의 말을 전합니다. :)
나는 너무 생각했다. 그러나 내가 할 때, if 문은 입력되지 않고'SqlDateTime overflow '를 얻는다.1/1/1753 12:00:00 AM과 12/31/9999 11:59:59 PM 사이 여야합니다. ' –
두 번째 비교시이 오류가 발생합니다 –
다음 결과를 시도하십시오. = DateTime.Compare (toDate, DateTime.Now); –