string tablename="";//表名
string vSQL = "SELECT A.name FROM syscolumns A INNER JOIN sysobjects B ON A.id = B.id WHERE (B.name = '"+tablename+"') ";
SqlConnection conn=new SqlConnection("Initial Catalog=customer;Data Source=GYLCPJ;Integrated Security=SSPI;");
conn.Open();
SqlDataAdapter comm = new SqlDataAdapter(vSQL, c1.ConnectionDataAccess());
DataSet ds = new DataSet();
comm.Fill(ds, tablename);
this.dataGrid1.DataSource=ds.Tables[0];
请问大家,我输出时,所有的行不是按表的顺序,而是按字母的顺序排列,为什么?帮帮我吧?!?!
分不够再加

解决方案 »

  1.   

    你在sql后加上一个order by b.name不就可以了吗
      

  2.   

    正常情况下是这样的:
    列:Name
    --------------------
    值:C_Id
        C_No
        C_Name
        C_Note
        C_IsDeleted
        C_OperatorNo
        C_ModifyDateTime
        C_bl
    但是输出后是:
    列:Name
    ---------------------
        C_bl
        C_Id
        C_IsDeleted
        C_ModifyDateTime
        C_No
        C_Name
        C_Note
        C_OperatorNo        
    请高手帮我看看,求求了!!!
        
      

  3.   

    换一种获得表字段名的方式!
    //获得表结构
    public static DataTable GetTableColumn(string varTableName)//varTableName:表名
    {
    DataTable dt = new DataTable(); try
    {
    Cnn = new OleDbConnection(CnnString);
    Cnn.Open();
    dt = Cnn.GetOleDbSchemaTable(OleDbSchemaGuid.Columns,new object[]{null,null,varTableName,null});
    }
    catch(Exception ex)
    {
    throw ex;
    }
    finally
    {
    Cnn.Close();
    } return dt;
    }//获得字段名的代码
    DataTable tempDt = GetTableColumn(strTableName);//strTableName:表名
    foreach ( DataRow dr in tempDt.Rows )//每条记录就是表的一个字段的相关信息
    {
    //去掉DataTable中的无用的信息,只获得字段名信息
    foreach ( DataColumn col in tempDt.Columns )
    {
    if ( col.Ordinal == 3 )  //列位置3存放的是表的列名
    {
                              String ColName = dr[col].ToString();
                       }
              }
    }
      

  4.   

    我来接分啦:select c.*
    from syscolumns c join sysobjects o on o.id=c.id
    where o.name='表名'或者select c.*
    from syscolumns c join sysobjects o on o.id=c.id
    where o.name='表名'
    order by c.colid