我想知道这段代码有什么问题。我正在使用SQLReportDataSource.SelectParameters.Add("@profileName", User.Identity.Name);
将参数添加到ASPX页面中的SQL Data Source
。它使用User.Identity.Name
来获取当前登录用户并将该值传递给ASPX SQL数据源,但DropDownList
未显示任何值且未显示任何错误。这甚至是从基于ASPX的数据源指定参数的正确方法吗?
即使我修改SQLReportDataSource.SelectParameters
以将值硬编码为我知道存在的事物并且确实产生我通过将SELECT查询输入SSMS而测试的结果,它也不返回任何内容。例如:
string name = "name";
SQLReportDataSource.SelectParameters.Add("@profileName", name);
我也尝试从SqlDataReader
获取值,但同样的事情。我哪里错了?
ASPX
<asp:SqlDataSource ID="SQLReportDataSource" runat="server" ConnectionString="<%$ ConnectionStrings:SFGSConnectionString1 %>" SelectCommand="SELECT [profileID], [profileName] FROM [vw_profile] WHERE profileName=@profileName">
<SelectParameters>
<asp:Parameter Name="@profileName" Type="String" />
</SelectParameters>
</asp:SqlDataSource>
<asp:DropDownList ID="chooseProfile" runat="server" DataSourceID="SQLReportDataSource" DataTextField="profileName" DataValueField="profileID" />
代码背后
SQLReportDataSource.SelectParameters.Add("@profileName", User.Identity.Name);
SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["SFGSConnectionString1"].ConnectionString);
conn.Open();
SqlCommand cmd = new SqlCommand("SELECT * FROM vw_reports WHERE profileName=@currentUser", conn);
cmd.Parameters.AddWithValue("@currentUser", User.Identity.Name);
SqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
string memberID = reader["memberID"].ToString();
int reportNum = Convert.ToInt32(reader["reportNumber"]);
reportNum++;
reportNumber.Text = reportNum.ToString();
}
reader.Close();
conn.Close();
答案 0 :(得分:1)
@
前缀
<asp:Parameter Name="profileName" Type="String" />
您可以在DataSource
Selecting
事件中指定参数值,如下所示
protected void SQLReportDataSource_Selecting(object sender, SqlDataSourceSelectingEventArgs e)
{
e.Command.Parameters["profileName"].Value = User.Identity.Name;
}
答案 1 :(得分:0)
除了使用damith设置这样的默认值 SQLReportDataSource.SelectParameters [“profileName”]。DefaultValue = User.Identity.Name;