0

我有 ac# 代码行,

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 的连接字符串,它可以工作但不能使用下拉列表

4

3 回答 3

2

确保您将 sqlquery 转换为 select 命令,然后您需要将 sqldatasource select 命令转换为 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();
        }
  }
于 2013-05-07T14:29:32.617 回答
1

您应该能够设置断点drop1.DataSource = sqlds;,然后将鼠标移到上方sqlds,它应该会显示 DataSource 中包含多少行。

于 2013-05-07T14:17:36.363 回答
1

您将数据源绑定到下拉列表的方式是正确的,同样的事情对我有用。

可能的错误可能是

  • connectionString. 验证是否正确。
  • 在选择查询中。验证SelectCommand()方法是否返回正确的 sql 查询。

使用SelectedSqlDataSource 的事件来验证它是否返回任何行,即

   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

不要这样做

SelectParameters而是提供一个 sql 参数,并将SqlDataSource

于 2013-05-07T14:18:55.520 回答