【发布时间】:2018-07-16 19:42:36
【问题描述】:
合作:
- ASP.Net 网络表单应用程序
- C# 代码不是 vb.net
- 带有硬编码测试数据的 SQL Server
注意:此问题不会导致任何错误或导致代码中断,但它的输出与预期不同。
我正在尝试使用文件隐藏代码填充 Gridview,用户可以在单击按钮时更新该文件。
要填充的代码:
protected void PopulateReport()
{
// create connection and add commands
SqlConnection con = new SqlConnection(GetConnectionString());
con.Open();
if(RP_SelectEmp.Text == "ALL")
{
string query1 = "SELECT RequestID, empName, RequestType, RequestDesc, RequestStartDate FROM TOR WHERE (RequestStartDate > @StartDate)" +
" AND (RequestEndDate < @EndDate) AND (granted = @State)";
SqlCommand cmd = new SqlCommand(query1, con);
// needed conversions
DateTime startD = Convert.ToDateTime(RP_FromDateSelect.Text);
DateTime endD = Convert.ToDateTime(RP_EndDateSelect.Text);
Boolean state = Convert.ToBoolean("True");
// needed parameters
cmd.Parameters.AddWithValue("@State", state);
cmd.Parameters.AddWithValue("@StartDate", startD);
cmd.Parameters.AddWithValue("@EndDate", endD);
// import into gridview
using (SqlDataReader reader = cmd.ExecuteReader())
{
if (reader.Read())
{
GridView1.DataSource = reader;
GridView1.DataBind();
}
else
{
RP_ErroField.Text = "failed to bind data (reader not read) check C# code";
}
}
con.Close();
}
}
这编译并且不返回错误但输出:
数据库表包含所有正确的数据类型和列名:
我尝试过的:
创建一个静态数据源并从上面的代码中传递相同的选择字符串(这将返回硬编码事件,与图片中看到的字段中的完全相同的输入) - 这告诉我查询是没错AddingDataSource,InputingData,Correct event Grabbed
我尝试更改代码中的转换,
DateTime.Parse和Convert.ToDateTime有相同的结果。 bool 和 Boolean 也可以这样说我已经分别尝试了每个where子句,并得到相同的无数据显示结果。
-
我已经调试了这个 if 语句 2 小时,所有变量数据都在做它应该做的事情(去 if、转换、设置值、运行阅读器和数据绑定)
我不知道还能尝试什么。我需要有关解决此问题的行动计划的帮助;也许我遗漏了什么,或者我的方法是错误的/过时的。
【问题讨论】:
-
从 WHERE 子句中一次删除一个参数,直到数据重新出现。这将告诉您哪个参数未通过查询(可能是“状态”参数)。
-
granted在数据库中的数据类型是什么?运行查询时,整个 query1 的值是多少? -
忘了说:按钮点击只包含 PopulateReport();对于那些会问的人
-
@RobertHarvey 嗨罗伯特,感谢您的回复,但我已经尝试过了,日期时间和布尔值似乎都会导致同样的问题。
-
@JacobH 嗨,雅各布。可以在正确的事件抓取列表中看到 query1 运行的值
标签: c# asp.net sql-server gridview output