HTML
<asp:TextBox ID="startDate" runat="server" </asp:TextBox>
<asp:TextBox ID="endDate" runat="server"></asp:TextBox>
<asp:Button ID="btnSearch" runat="server" Text="search" OnClick="btnSearch_Click"/>
Datepicker Js / Jquery
$("#startDate").datepicker(
{
onSelect: function (date) {
var date1 = $('#startDate').datepicker('getDate');
var date = new Date(Date.parse(date1));
date.setDate(date.getDate() + 0);
var newDate = date.toDateString();
newDate = new Date(Date.parse(newDate));
$('#endDate').datepicker("option", "minDate", newDate);
},
onClose: function (dateText, inst) {
$(this).datepicker('option', 'dateFormat', 'dd.mm.yy');
},
});
$("#endDate").datepicker({
onClose: function (dateText, inst) {
$(this).datepicker('option', 'dateFormat', 'dd.mm.yy');
},
});
Asp.net CodeBehind
protected void btnSearch_Click(object sender, EventArgs e)
{
startDate.Text = Request.Form[startDate.UniqueID]; // I get startDate
endDate.Text = Request.Form[endDate.UniqueID]; // I get endDate
spGetReport(Tools.AbsoluteStart(Convert.ToDateTime(startDate.Text)),
Tools.AbsoluteEnd(Convert.ToDateTime(endDate.Text)));
}
存储过程参数类
private DataSet spGetReport(DateTime startDate, DateTime EndDate)
{
// Connection settings here.. no code for simple question
SqlCommand scmd = new SqlCommand();
scmd.CommandText = "sp_Report";
scmd.Parameters.Add("@startDate", SqlDbType.DateTime);
scmd.Parameters["@startDate"].Value = startDate;
scmd.Parameters.Add("@EndDate", SqlDbType.DateTime);
scmd.Parameters["@EndDate"].Value = EndDate;
// etc...
}
帮助程序类,以获得一天的最短日期时间和最长日期时间。
/// gets 00:00:00 of a day
public static DateTime AbsoluteStart(DateTime dateTime)
{
return dateTime.Date;
}
/// gets 23:59:59 of a day
public static DateTime AbsoluteEnd(DateTime dateTime)
{
return dateTime.Date.AddDays(1).AddSeconds(-1);
}
存储过程
ALTER procedure [dbo].[sp_Report]
(
@startDatedatetime,
@EndDate datetime
)
as
select * from MyTable where startDAteColumn between CAST(@startDate AS VARCHAR(100) and CAST(@EndDateAS VARCHAR(100)
注意: 存储已编程的作品。
我有非常复杂的存储过程查询,这就是为什么我在&#34; Store Procedured&#34;中显示简单代码的原因。部分。问题在于搜索数据。当我在 startdate 和 enddate 之间搜索数据时,数据永远不会正确,因为存在问题从c#asp.net代码后面强制转换或发送参数。我认为由于在sql端进行转换而出现问题。我无法在sql端更改强制转换。我必须在后面的asp.net代码中更改它。
或者
无论你能提出什么建议,我都可以申请。我在asp.net代码隐藏中错过了什么?
感谢。
答案 0 :(得分:1)
让我们在这里向后工作 - 你的存储过程永远不会工作,你没有为where
指定一个字段,它有2个缺少紧密的括号。
select * from MyTable
where between CAST(@startDate AS VARCHAR(100) and CAST(@EndDateAS VARCHAR(100)
应该是
select * from MyTable
where SOMEFIELD between CAST(@startDate AS VARCHAR(100)) and CAST(@EndDateAS VARCHAR(100))
此外,使用日期时BETWEEN
关键字必须是实际日期 - 转换为VARCHAR
的日期不太可能有效。
接下来,使用Convert.ToDateTime(startDate.Text)
是一种容易出错的方式,可以从字符串转换为日期。相反,您应该调用DateTime.ParseExact
(或更恰当地TryParseExact
)来指定要使用的格式。