Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 序列不是连续的_C#_Ms Access_String Formatting_Oledbdatareader - Fatal编程技术网

C# 序列不是连续的

C# 序列不是连续的,c#,ms-access,string-formatting,oledbdatareader,C#,Ms Access,String Formatting,Oledbdatareader,从上一篇文章中,我已经解决了如何显示MS Access DB文件中的信息。问题是,在我删除了一些用作示例尝试的条目之后,序列号就乱了,现在条目的ID就乱了。下面是它现在的样子,下面是我的代码 === Magazine 1 === People Times Inc. 4.95 19.95 === Magazine 2 === Car and Driver Hachetter Inc. 3.95 19.99 === Magazine 7 === a b 1 2 按钮事件(我怀疑是代码故障):

从上一篇文章中,我已经解决了如何显示MS Access DB文件中的信息。问题是,在我删除了一些用作示例尝试的条目之后,序列号就乱了,现在条目的ID就乱了。下面是它现在的样子,下面是我的代码

=== Magazine 1 ===
People
Times Inc.
4.95
19.95

=== Magazine 2 ===
Car and Driver
Hachetter Inc.
3.95
19.99

=== Magazine 7 ===
a
b
1
2
按钮事件(我怀疑是代码故障):

如何使序列号按顺序显示

编辑我将按以下方式计算所有条目:

        try
        {
            // open the connection
            conn.Open();

            // retrieve data from the data source to the data reader
            drMagazines = cmdMagazines.ExecuteReader();

            int i = 0;

            if (drMagazines.HasRows)
            {
                while (drMagazines.Read())
                {
                    i++;

                    displayMags.txtDisplayMags.Text += "=== Magazine " + 
                        i + " ===" + Environment.NewLine + 
                        drMagazines.GetValue(1) + Environment.NewLine +
                        drMagazines.GetValue(2) + Environment.NewLine +
                        drMagazines.GetValue(3) + " / issue" + Environment.NewLine +
                        drMagazines.GetValue(4) + " / year" + Environment.NewLine + 
                        Environment.NewLine;
                }
            }
        }
将SQL更改为:

cmdMagazines.CommandText = "select * from magazine"; 
致:

它们不是“序列号”,而是“主键”


关键点永远不应更改,因此是的,删除行将产生间隙。没有内置的重新编号机制

我不使用任何SQL查询检索数据。我只使用DataReader。@HelpNeeder:您只能通过执行查询来获取DataReader。哦,好吧,我想问题在于数字被跳过了,因为我删除了一些条目。我想我对此无能为力。主键通常用作行标识符。如果使用select语句更改了行的标识符,则以后将无法在update或delete语句中找到该行。如果您只是想根据所选行数显示一系列数字,请使用SQL的ROW_number()函数,并将主键ID保留为对原始表行的隐藏引用。Oops。。。把它擦掉。您正在使用Access数据库。行号()将不可用。因此,我对此无能为力?顺便提一下您认为这段代码足够了吗?您可以添加一个额外的列并使用C#或SQL重新编号。但不要搞乱PK。通常不显示PK。您的
displayMags.txtDisplayMags.Text+=将变得(非常)低效。看看StringBuilder。嗯,是的,我知道。但这足以让作业获得A:)PS.(我的编辑)这本书的数量将更好地计算我的条目,对吗?@HelpNeeder您可以做些什么:每次删除记录时压缩并修复数据库。这将重置自动编号(或至少用于Access 2003及更早版本)。这不会填补已经存在的空白,但会防止在序列末尾出现新的空白。例如,对于项目1、2和7,创建项目8并将其删除。在创建新项目之前进行压缩和修复,新项目也将为8;否则将是9。但是,请注意,如果第一项8的长度足以在任何地方留下痕迹,这可能会导致混淆或其他问题。您所说的“无序”是指ID没有排序(即1、3、2),还是在ID之间缺少ID(即1、4、7)?1、2、7是有序的。它不是连续的。
cmdMagazines.CommandText = "select * from magazine"; 
cmdMagazines.CommandText = "select * from magazine order by ID";