C# 如何在插入时阻止Ms Sql自动排序

C# 如何在插入时阻止Ms Sql自动排序,c#,asp.net,sql-server,database,C#,Asp.net,Sql Server,Database,当我向表中插入任何数据时,bus_id会自动按字母顺序排序。我希望按插入顺序查看它们,因为我的bus_id是varchar,由整数和字符串组合而成。所以把它们分类会把它们弄得乱七八糟 我用来生成总线id列的代码 SqlCommand cmd = new SqlCommand("select count(bus_id) from bus_details", con); int i = Convert.ToInt32(cmd.ExecuteScalar()); con.Close();

当我向表中插入任何数据时,bus_id会自动按字母顺序排序。我希望按插入顺序查看它们,因为我的bus_id是varchar,由整数和字符串组合而成。所以把它们分类会把它们弄得乱七八糟

我用来生成总线id列的代码

  SqlCommand cmd = new SqlCommand("select count(bus_id) from bus_details", con);


int i = Convert.ToInt32(cmd.ExecuteScalar());
  con.Close();
  i++;
  lblbusid.Text = busID + i.ToString();
并将数据传递到表中

SqlCommand cmd = new SqlCommand("insert into bus_details (bus_id,bcompany_id, bus_type,capacity) values(@bus_id,@bcompany_id, @bus_type,@capacity)", con);

cmd.Parameters.AddWithValue("@bus_id", lblbusid.Text);

总之,在我给出OP想要的答案和一些奖励提示之前

  • SQL将按聚集的键或索引指示的顺序物理存储行,您可以定义这是什么
  • SQL将根据您的查询以最快的速度返回查询要求的任何记录,但您不应推断它返回记录的顺序与它们的存储顺序相关
  • 如果您没有指定顺序,它有权以任何顺序返回记录,而大多数人没有意识到的是,它可能会在一段时间后以不同的顺序返回未更改查询的记录,而此时以不同的方式检索记录会更有效。因此,如果您关心顺序,则必须指定ORDERBY子句,即使它们似乎已经按照您想要的顺序出现
  • SQL server可以帮助您唯一地标识行。使用身份栏,而不是自己重新发明轮子,因为有很多陷阱
  • 问题的答案是在select查询的末尾添加此子句。。。“按顺序订购”

    其他提示

    • SqlCommand和SqlConnection是一次性的,所以使用块将它们放在
    • 在它给你带来麻烦之前,我建议你

    SQL Server不会“自动排序”。读取数据时也没有排序顺序,除非您使用
    orderby
    指定排序顺序。如果
    bus\u id
    是主键,它将按此列排序。由于@PanagiotisKanavos pointedSQL不保证没有订单依据的订单,因此您可以使用
    order by
    更改订单。您的ID将导致您的问题,即使是您当前生产的订单。@RicardoPontual只是出于偶然。如果它也是一个聚集索引,则可以按该顺序存储。但是,如果未指定
    orderby
    ,服务器可以以任何顺序返回数据。并行、连接、到tempdb的假脱机可以更改行的处理顺序以及它们发送到数据库的方式client@Ricardo绝对不是。在计划更改之前,它可能会按该顺序返回数据。看我上面贴的链接,它100%地揭穿了这个神话。正是聚集索引,而不是主键,使这种行为看起来像是以这种方式运行的。