我有一个c#代码行,
using (SqlDataSource sqlds = new SqlDataSource(ConnectionString(), SelectCommand()))
{
drop1.DataSource = sqlds;
drop1.DataTextField = "UserName";
drop1.DataBind();
}
现在它没有填充我的下拉列表,
<asp:DropDownList id="drop1" runat="server" />
所以我想检查sql是否正在返回数据
如果我放线,我不知道如何找出sql是否正在返回数据,我正在使用select语句和gridview的连接字符串,它可以工作,但没有下拉列表
答案 0 :(得分:2)
确保你的sqlquery进入select命令然后你需要转换你 sqldatasource选择命令进入dataview。
string query = "select yourfield from yourtable";
using (SqlDataSource sqlds = new SqlDataSource(conn.ConnectionString, query))
{
System.Data.DataView dv = (System.Data.DataView)sqlds.Select(DataSourceSelectArguments.Empty);
if (dv.Count > 0)
{
DropDownList1.DataSource = sqlds;
DropDownList1.DataTextField = "yourfield";
DropDownList1.DataBind();
}
}
答案 1 :(得分:1)
您应该能够在drop1.DataSource = sqlds;
上放置断点,然后将鼠标移到sqlds
上,它应该显示DataSource中包含的行数。
答案 2 :(得分:1)
将数据源绑定到下拉列表的方式是正确的,同样的事情对我有用。
可能的错误可能是
connectionString
中。验证它是否正确。
选择查询中的SelectCommand()
方法是否返回正确的sql查询。使用SqlDataSource的Selected
事件来验证它是否返回任何行,即
sqlds.Selected += new SqlDataSourceStatusEventHandler(sdl_Selected);
其中sql_Selected为:
void sdl_Selected(object sender, SqlDataSourceStatusEventArgs e)
{
var a = e.AffectedRows;
}
作为旁注 - 确保您的选择查询不包含任何易于sql注入的字符串连接。即SELECT UserName from [TableName] where certainCol ="+ variable
。
不要这样做
提供sql参数,并将SelectParameters
添加到SqlDataSource