我错过了什么。我试图从SQL数据库中的表填充下拉列表。我在表中有几列,但根据从文本框输入的值,只需要2,1表示值,1表示文本。我的测试页面我刚给了会话变量一个来自我的表的值。我测试了我的SQL连接并且变化了。我已经在SQL中测试了我的select语句,并且变化了我只收到了我想要的数据。
有人可以告诉我我做错了什么。
下拉列表是一个简单的asp DDL:
<asp.DropDownList ID="DD1" runat="server"></asp.DropDownList>
背后的代码是:
protected void Page_Load(object sender, EventArgs e)
{
string a = Session["Test"] as string;
string IDSel = "SELECT Value, Text FROM DDL1 WHERE Value = '@Value'";
SqlConnection IDcon = new SqlConnection(connection string);
IDcon.Open();
SqlDataAdapter adapter = new SqlDataAdapter(IDSel, IDcon);
adapter.SelectCommand.Parameters.AddWithValue("@Value", a);
DataSet IDds = new DataSet();
adapter.Fill(IDds);
try
{
DD1.DataSource = IDds;
DD1.DataTextField = "Text";
DD1.DataValueField = "Value";
DD1.DataBind();
}
catch
{
Response.Write("No data found");
}
IDcon.Close();
}
我的母版页包含:
Session["Test"] = //a value from my table
我添加了
Response.Write(a);
在不同的点,我得到的表值显示在我预期的位置,我从未收到任何数据。 我找到的一个例子让我添加
DD1.BindData();
在DD1.DataSource
行之后,但导致有关我的参数值的错误消息。我已经运行了调试,它运行得很干净。
答案 0 :(得分:2)
试试这个
DD1.DataSource = IDds.Tables[0];
答案 1 :(得分:1)
如果将参数占位符放在单引号之间,则将其视为字符串文字,而不是参数
string IDSel = "SELECT Value, [Text] FROM DDL1 WHERE Value = @Value";
另外为了避免与保留关键字混淆,我认为你需要在方括号之间放置TEXT一词
答案 2 :(得分:1)
添加sql参数的正确方法
adapter.SelectCommand.Parameters.AddWithValue("Value", a);
和
string IDSel = "SELECT Value, Text FROM DDL1 WHERE Value = @Value";