用一条带order by 的sql语句查询数据,填充到dataset里面,为什么排序还不按照写好的order by 来排序呢?

时间:2022-06-11 01:01:56
用一条带order by 的sql语句查询数据,填充到dataset里面,为什么排序还不按照写好的order by 来排序呢?

16 个解决方案

#1


实在不行,你就用DATAVIEW自带的排序功能呗。
不过我们的排序ORDER BY 是没问题的啊。

#2


  把你的sql语句在  查询分析器里面  试试  看得到的值 是不是 和 datatable的值一样

#3


你确定你取到的数据正确? 

#4


引用 2 楼 lovesheng1212 的回复:
把你的sql语句在 查询分析器里面 试试 看得到的值 是不是 和 datatable的值一样

填充到dataset当中之前调试的sql语句一直就是排序正确的。

#5


理论上不会,具体的楼主可贴出相关代码,供大家分析一下。你目前提供的内容,难以给出解决方案

#6


贴一下sql语句
和读出Dataset后绑定到控件上的代码

#7


引用 3 楼 q107770540 的回复:
你确定你取到的数据正确?

应该顺序是好的吧

#8



        protected void Page_Load(object sender, EventArgs e)
        {
            Bind();
        }

        /// <summary>
        /// 绑定区域信息
        /// </summary>
        protected void Bind()
        {
            string sql = string.Empty;
            gvdept.DataSource = fy_dep.GetList("FlagDeleted = 0 AND FlagTrashed = 0 AND Layer = 2 AND DeptID1 NOT IN ( SELECT DeptID FROM   dbo.FY_Department WHERE  DeptNo IN ( '01', '02' ) ) ORDER BY dbo.FY_Department.DeptNo");
            gvdept.DataBind();
        }



/// <summary>
/// 获得数据列表
/// </summary>
public DataSet GetList(string strWhere)
{
return dal.GetList(strWhere);
}


/// <summary>
/// 获得数据列表
/// </summary>
public DataSet GetList(string strWhere)
{
StringBuilder strSql=new StringBuilder();
            //strSql.Append("select DeptID,DeptNo,DeptName,Layer,ModDate,FlagTrashed,FlagDeleted,Header,ExDate,Tel,Address,BrokerNo,DeptLimitedProperty,DeptLimitedInquiry,DeptLimitedPublic,DeptLimitedPrivate,DistrictLimitedProperty,DistrictLimitedInquiry,AreaLimitedProperty,AreaLimitedInquiry,DeptLimitedPF,DeptLimitedIF,TargetCon,TargetAct,DeptType,DeptID1,DeptID2,DeptID3,DeptGroup,cox,coy,exchangedate,location ");
            strSql.Append("select DeptID,DeptNo,DeptName,Layer,Direction ");
            strSql.Append(" FROM FY_Department ");
if(strWhere.Trim()!="")
{
strSql.Append(" where "+strWhere);
}

            DbHelperSQL.ChangeDBServer("9");
return DbHelperSQL.Query(strSql.ToString());
}

        /// <summary>
        /// 执行查询语句,返回DataSet
        /// </summary>
        /// <param name="SQLString">查询语句</param>
        /// <returns>DataSet</returns>
        public static DataSet Query(string SQLString)
        {
            using (SqlConnection connection = new SqlConnection(connectionString))
            {
                DataSet ds = new DataSet();
                try
                {
                    connection.Open();
                    SqlDataAdapter command = new SqlDataAdapter(SQLString, connection);
                    command.Fill(ds, "ds");
                }
                catch (System.Data.SqlClient.SqlException ex)
                {
                    throw new Exception(ex.Message);
                }
                return ds;
            }
        }


        <asp:GridView ID="gvdept" runat="server" AutoGenerateColumns="False" HorizontalAlign="Center"
            Width="500px" OnRowDataBound="gvdept_RowDataBound">
            <RowStyle HorizontalAlign="Center" VerticalAlign="Middle" />
            <Columns>
                <asp:BoundField DataField="deptname" HeaderText="区域名称" />
                <asp:TemplateField HeaderText="划分">
                    <ItemTemplate>
                        <asp:RadioButtonList ID="rblDirection" runat="server" RepeatDirection="Horizontal"
                            class="huafen">
                            <asp:ListItem Value="0" Text="不分"></asp:ListItem>
                            <asp:ListItem Value="1" Text="东南"></asp:ListItem>
                            <asp:ListItem Value="2" Text="西北"></asp:ListItem>
                        </asp:RadioButtonList>
                        <asp:HiddenField ID="hiddeptid" runat="server" Value='<%# Eval("deptid") %>' />
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
            <HeaderStyle Font-Size="14px" Height="30px" />
        </asp:GridView>

断点调试sql语句的顺序和gridview上面显示的顺序不是一样的。

#9


DataSet就如同一个微型数据库,所以操作和数据库一样,没有排序你取数据的时候再排一次吧

#10


理解错误~~~

#11



   protected void Page_Load(object sender, EventArgs e)
        {
if(!isPostback){
            Bind();}
        }



还有使用SqlDataAdapter的时候SqlConnection不用手动Open,适配器会自动打开的
SqlCommand需要手动Open

#12


楼主,你确定你渠道的数据是对的?

#13


引用 11 楼 teng_s2000 的回复:
C# code

   protected void Page_Load(object sender, EventArgs e)
        {
if(!isPostback){
            Bind();}
        }




还有使用SqlDataAdapter的时候SqlConnection不用手动Open,适配器会自动打开的
SqlComma……

我那个SqlDataAdapter是李天平的代码生成器生成的,难道李天平也写错了?

#14


引用 9 楼 teng_s2000 的回复:
DataSet就如同一个微型数据库,所以操作和数据库一样,没有排序你取数据的时候再排一次吧

您是说,在这里的sql语句里面就没必要写order by了吗?需要dataset进行一次排序?

#15


应该和DataSet没关系。你把Sql语句提出来单独运行一下,感觉和ORDER BY dbo.FY_Department.DeptNo这句有关系。改成ORDER BY DeptNo试试

#16


sql语句单独提出来运行的顺序跟dataset就是不一样。

#1


实在不行,你就用DATAVIEW自带的排序功能呗。
不过我们的排序ORDER BY 是没问题的啊。

#2


  把你的sql语句在  查询分析器里面  试试  看得到的值 是不是 和 datatable的值一样

#3


你确定你取到的数据正确? 

#4


引用 2 楼 lovesheng1212 的回复:
把你的sql语句在 查询分析器里面 试试 看得到的值 是不是 和 datatable的值一样

填充到dataset当中之前调试的sql语句一直就是排序正确的。

#5


理论上不会,具体的楼主可贴出相关代码,供大家分析一下。你目前提供的内容,难以给出解决方案

#6


贴一下sql语句
和读出Dataset后绑定到控件上的代码

#7


引用 3 楼 q107770540 的回复:
你确定你取到的数据正确?

应该顺序是好的吧

#8



        protected void Page_Load(object sender, EventArgs e)
        {
            Bind();
        }

        /// <summary>
        /// 绑定区域信息
        /// </summary>
        protected void Bind()
        {
            string sql = string.Empty;
            gvdept.DataSource = fy_dep.GetList("FlagDeleted = 0 AND FlagTrashed = 0 AND Layer = 2 AND DeptID1 NOT IN ( SELECT DeptID FROM   dbo.FY_Department WHERE  DeptNo IN ( '01', '02' ) ) ORDER BY dbo.FY_Department.DeptNo");
            gvdept.DataBind();
        }



/// <summary>
/// 获得数据列表
/// </summary>
public DataSet GetList(string strWhere)
{
return dal.GetList(strWhere);
}


/// <summary>
/// 获得数据列表
/// </summary>
public DataSet GetList(string strWhere)
{
StringBuilder strSql=new StringBuilder();
            //strSql.Append("select DeptID,DeptNo,DeptName,Layer,ModDate,FlagTrashed,FlagDeleted,Header,ExDate,Tel,Address,BrokerNo,DeptLimitedProperty,DeptLimitedInquiry,DeptLimitedPublic,DeptLimitedPrivate,DistrictLimitedProperty,DistrictLimitedInquiry,AreaLimitedProperty,AreaLimitedInquiry,DeptLimitedPF,DeptLimitedIF,TargetCon,TargetAct,DeptType,DeptID1,DeptID2,DeptID3,DeptGroup,cox,coy,exchangedate,location ");
            strSql.Append("select DeptID,DeptNo,DeptName,Layer,Direction ");
            strSql.Append(" FROM FY_Department ");
if(strWhere.Trim()!="")
{
strSql.Append(" where "+strWhere);
}

            DbHelperSQL.ChangeDBServer("9");
return DbHelperSQL.Query(strSql.ToString());
}

        /// <summary>
        /// 执行查询语句,返回DataSet
        /// </summary>
        /// <param name="SQLString">查询语句</param>
        /// <returns>DataSet</returns>
        public static DataSet Query(string SQLString)
        {
            using (SqlConnection connection = new SqlConnection(connectionString))
            {
                DataSet ds = new DataSet();
                try
                {
                    connection.Open();
                    SqlDataAdapter command = new SqlDataAdapter(SQLString, connection);
                    command.Fill(ds, "ds");
                }
                catch (System.Data.SqlClient.SqlException ex)
                {
                    throw new Exception(ex.Message);
                }
                return ds;
            }
        }


        <asp:GridView ID="gvdept" runat="server" AutoGenerateColumns="False" HorizontalAlign="Center"
            Width="500px" OnRowDataBound="gvdept_RowDataBound">
            <RowStyle HorizontalAlign="Center" VerticalAlign="Middle" />
            <Columns>
                <asp:BoundField DataField="deptname" HeaderText="区域名称" />
                <asp:TemplateField HeaderText="划分">
                    <ItemTemplate>
                        <asp:RadioButtonList ID="rblDirection" runat="server" RepeatDirection="Horizontal"
                            class="huafen">
                            <asp:ListItem Value="0" Text="不分"></asp:ListItem>
                            <asp:ListItem Value="1" Text="东南"></asp:ListItem>
                            <asp:ListItem Value="2" Text="西北"></asp:ListItem>
                        </asp:RadioButtonList>
                        <asp:HiddenField ID="hiddeptid" runat="server" Value='<%# Eval("deptid") %>' />
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
            <HeaderStyle Font-Size="14px" Height="30px" />
        </asp:GridView>

断点调试sql语句的顺序和gridview上面显示的顺序不是一样的。

#9


DataSet就如同一个微型数据库,所以操作和数据库一样,没有排序你取数据的时候再排一次吧

#10


理解错误~~~

#11



   protected void Page_Load(object sender, EventArgs e)
        {
if(!isPostback){
            Bind();}
        }



还有使用SqlDataAdapter的时候SqlConnection不用手动Open,适配器会自动打开的
SqlCommand需要手动Open

#12


楼主,你确定你渠道的数据是对的?

#13


引用 11 楼 teng_s2000 的回复:
C# code

   protected void Page_Load(object sender, EventArgs e)
        {
if(!isPostback){
            Bind();}
        }




还有使用SqlDataAdapter的时候SqlConnection不用手动Open,适配器会自动打开的
SqlComma……

我那个SqlDataAdapter是李天平的代码生成器生成的,难道李天平也写错了?

#14


引用 9 楼 teng_s2000 的回复:
DataSet就如同一个微型数据库,所以操作和数据库一样,没有排序你取数据的时候再排一次吧

您是说,在这里的sql语句里面就没必要写order by了吗?需要dataset进行一次排序?

#15


应该和DataSet没关系。你把Sql语句提出来单独运行一下,感觉和ORDER BY dbo.FY_Department.DeptNo这句有关系。改成ORDER BY DeptNo试试

#16


sql语句单独提出来运行的顺序跟dataset就是不一样。