none
在Web中给dropdownlist控件绑定数据,用sqlcommand对象为什么不能绑定数据库中的第一条数据?求解… RRS feed

  • 问题

  •             SqlCommand cmd = new SqlCommand("select * from categories", con);
                con.Open();
                SqlDataReader read = cmd.ExecuteReader();
                if (read.Read())
                {
                    DropDownList1.DataSource = read;
                    DropDownList1.DataTextField = "categoryname";
                    DropDownList1.DataValueField = "categoryid";
                    DropDownList1.DataBind();
                }
                read.Dispose();
                con.Close();

    在categories表中有8条数据,但这段代码为什么不能绑定到第一条数据?…

    2011年6月9日 11:43

答案

  • 你好:)

    删除“if……”部分,建议这样做:

      SqlCommand cmd = new SqlCommand("select * from categories", con);
    con.Open();
    SqlDataReader read = cmd.ExecuteReader();
    DropDownList1.DataSource = read;
    DropDownList1.DataTextField = "categoryname";
    DropDownList1.DataValueField = "categoryid";
    DropDownList1.DataBind();
    con.Close();

    如果依旧不行,请直接使用SqlDataAdapter+DataTable方式填充并且绑定:

    using (SqlDataAdapter adapter = new SqlDataAdapter("select * from xxx"), new SqlConnection("……"))

    {
      DataTable dt = new DataTable();

    DropDownList1.DataSource = dt;
    DropDownList1.DataTextField = "categoryname";

    DropDownList1.DataValueField = "categoryid";
    DropDownList1.DataBind();

    }


    如果你有其它意见或私下交流,请发送邮件到:maledong@qq.com;或者请QQ我
    下载MSDN桌面工具(Vista,Win7)
    下载Technet桌面小工具(Vista,Win7)
    慈善点击,点击此处
    2011年6月10日 3:22
    版主
  • Hi,

    Datareader.read() 方法如果存在多个行,则为  true;否则为  false

    如果按照您的写法,ifread.Read()),当读到最后一条数据之后,由于没有下一条了,此时就会返回false,当然最后一条数据也是不能进入到 if 代码块的。

    关于Datareader.read() MSDN 详细解释:

        SqlDataReader.Read 方法

    谢谢您的支持和理解。


    Best Regards,
    Rocky Yue[MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2011年6月14日 2:02
    版主
  • 用datatable绑定看看

    用 if (read.Read()),可能数据库游标已经指到第2行了

     


    http://feiyun0112.cnblogs.com/
    2011年6月15日 2:47
    版主

全部回复

  • 我想你是指绑定后的数据 没有选择第一条么?

    你可以使用DropDownList1的selectindex属性来指定选择的记录。

     


    family as water
    2011年6月9日 12:47
  • 你好:)

    删除“if……”部分,建议这样做:

      SqlCommand cmd = new SqlCommand("select * from categories", con);
    con.Open();
    SqlDataReader read = cmd.ExecuteReader();
    DropDownList1.DataSource = read;
    DropDownList1.DataTextField = "categoryname";
    DropDownList1.DataValueField = "categoryid";
    DropDownList1.DataBind();
    con.Close();

    如果依旧不行,请直接使用SqlDataAdapter+DataTable方式填充并且绑定:

    using (SqlDataAdapter adapter = new SqlDataAdapter("select * from xxx"), new SqlConnection("……"))

    {
      DataTable dt = new DataTable();

    DropDownList1.DataSource = dt;
    DropDownList1.DataTextField = "categoryname";

    DropDownList1.DataValueField = "categoryid";
    DropDownList1.DataBind();

    }


    如果你有其它意见或私下交流,请发送邮件到:maledong@qq.com;或者请QQ我
    下载MSDN桌面工具(Vista,Win7)
    下载Technet桌面小工具(Vista,Win7)
    慈善点击,点击此处
    2011年6月10日 3:22
    版主
  • 这我知道,能不能跟我讲讲为什么加了if(read.Read())后第一条数据得不到绑定,我感觉应该可以的啊…
    2011年6月10日 6:10
  • Hi,

    Datareader.read() 方法如果存在多个行,则为  true;否则为  false

    如果按照您的写法,ifread.Read()),当读到最后一条数据之后,由于没有下一条了,此时就会返回false,当然最后一条数据也是不能进入到 if 代码块的。

    关于Datareader.read() MSDN 详细解释:

        SqlDataReader.Read 方法

    谢谢您的支持和理解。


    Best Regards,
    Rocky Yue[MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2011年6月14日 2:02
    版主
  • 用datatable绑定看看

    用 if (read.Read()),可能数据库游标已经指到第2行了

     


    http://feiyun0112.cnblogs.com/
    2011年6月15日 2:47
    版主