我必须遵循在sql server 2008 r2中执行存储过程所必需的参数
da.SelectCommand.Parameters.AddWithValue("@StartDate", sessionStartDate.ToString());
da.SelectCommand.Parameters.AddWithValue("@EndDate", sessionEndDate.ToString());
da.SelectCommand.Parameters.AddWithValue("@PaymentType", payment.ToString());
这些是执行存储过程所必需的。所有会话变量都正确传递。但是,当gridview呈现时,它不显示任何数据。我知道有数据,因为我可以在SSMS上运行存储过程,并且它与传递给proc的参数完美地运行(当我输入它们时)。
我现在很困惑所以任何帮助都会有所帮助。
grdDenialDetail.DataSource = ds.Tables["DetailDenial"].DefaultView;
grdDenialDetail.DataBind();
整个常规:(也许这会有所帮助)
public void ExecuteDetailReport()
{
string sessionConnection = Session["Company"].ToString();
string sessionStartDate = Session["StartDate"].ToString();
string sessionEndDate = Session["EndDate"].ToString();
string payment = Session["payment"].ToString();
SqlConnection conn = new SqlConnection(WebConfigurationManager.ConnectionStrings[sessionConnection].ConnectionString);
SqlDataAdapter da = new SqlDataAdapter("dbo.cusGenDenialReportPivotStylePType", conn);
da.SelectCommand.CommandType = CommandType.StoredProcedure;
/*da.SelectCommand.Parameters.Add(new SqlParameter("@StartDate", SqlDbType.VarChar, 11)).Value = sessionStartDate.ToString();
da.SelectCommand.Parameters.Add(new SqlParameter("@EndDate", SqlDbType.VarChar, 11)).Value = sessionEndDate.ToString();
da.SelectCommand.Parameters.Add(new SqlParameter("@PaymentType", SqlDbType.VarChar, 100)).Value = payment.ToString();*/
da.SelectCommand.Parameters.AddWithValue("@StartDate", sessionStartDate);
da.SelectCommand.Parameters.AddWithValue("@EndDate", sessionEndDate);
da.SelectCommand.Parameters.AddWithValue("@PaymentType", payment);
lblTest.Visible = true;
lblTest.Text = "You selected " + payment + ".";
DataSet ds = new DataSet();
da.Fill(ds, "DetailDenial");
grdDenialDetail.DataSource = ds.Tables["DetailDenial"].DefaultView;
grdDenialDetail.DataBind();
da.Dispose();
conn.Close();
}
答案 0 :(得分:1)
从您的代码中删除.ToString()
次来电。
答案 1 :(得分:1)
我认为您的问题与您使用和比较日期为字符串而非日期的事实有关。您的结果集为空,因为您的查询尝试按日期字符串而不是按时间顺序比较日期字符串。要重构您的代码,我会确保您解决以下问题:
设置会话变量
小心地解析文本字段中的日期。
DateTime startDate;
if (DateTime.TryParseExact(txtStartDate.Text, "MM/dd/yyyy",
CultureInfo.CurrentCulture, DateTimeStyles.None, out startDate))
{
Session["StartDate"] = startDate;
}
DateTime endDate;
if (DateTime.TryParseExact(txtEndDate.Text, "MM/dd/yyyy",
CultureInfo.CurrentCulture, DateTimeStyles.None, out endDate))
{
Session["EndDate"] = endDate;
}
当TryParseExact
方法返回false
(解析失败)时,您可能希望处理这种情况。
检索会话变量
我们将会话变量设置为DateTime
个对象,然后在检索时将其转换回来:
var sessionStartDate = (DateTime)Session["StartDate"];
var sessionEndDate = (DateTime)Session["EndDate"];
请注意,我们仍在使用本机.NET类型。
设置查询参数
使用.Date
结构的DateTime
属性删除时间组件:
da.SelectCommand.Parameters.AddWithValue("@StartDate", sessionStartDate.Date);
da.SelectCommand.Parameters.AddWithValue("@EndDate", sessionEndDate.Date);
...
最后,更新存储过程,使其参数的类型为date
:
CREATE PROCEDURE dbo.cusGenDenialReportPivotStylePType
(
@StartDate date = null,
@EndDate date = null,
...
)
AS
...
SELECT
*
FROM
Somewhere
WHERE
TheDate BETWEEN @StartDate AND @EndDate
以原生数据格式保存所有内容将使您的生活更轻松。