2015-05-29 47 views
1

我有一个访问数据库,我正在为C#接口。我不使用内置的一个,因为我不知道VB。自动生成C#中的Access数据库的ID

对于数据库中的两个表我想ID来自动生成,而不是让用户输入它们。我能想到的唯一办法做到这一点是:

  1. 生成一个随机ID
  2. 检查表中的所有记录,以确保不具有相同的ID。
  3. 如果它是唯一的使用该ID。否则,生成一个新的ID。

我只是想一定做一个更好的更有效的方法。谁能帮我?

此外,我的数据库需要稍后通过网络从不同的计算机访问。为此使用Access是否正常?使用其他数据库如MS-SQL有什么优势吗?

+4

就让访问自动生成的ID。没有必要手动创建。只需将id字段定义为自动增量。 – germi

+1

我很肯定Access有一个自动编号的列类型... [检查出来](http://stackoverflow.com/questions/1072932/how-to-create-an-autonumber-field-value-in -access) – crashmstr

+3

我会使用MS-SQL来代替,它有一个免费版本--SQL Server Express。访问可以通过网络使用,但它涉及将数据库放置在网络驱动器上,并且全部都是在20世纪90年代。 – codeulike

回答

1

访问有一个自动编号的列,将为您做到这一点。

但是,如果你要自己做(不推荐),你将有一个这样的表:

TableName  NextId 
---------  ------ 
SomeTable  123 
SomethingElse 4567 

即跟踪每个表的最后使用的ID。实际上它有点复杂,因为你必须使用锁定来确定何时生成一个新的ID,只有一个人使用它。 Access在内部使用这样的机制来生成其自动ID。

虽然我们在它,我想你可以只使用GUID。实际上,每当您生成一个宇宙时,它们在整个已知宇宙中都保证是唯一的。见C# how to create a Guid value?

Access数据库可以共享 - 你基本上把数据库中的网络驱动器上。它是20世纪90年代的一种方法。

但最终你已经开使用MS-SQL更好 - 有一个名为SQL Server Express的免费版。真正的访问只有在你也用它作为前端时才有用。如果你在C#中做前端,你也可以去MS-SQL。

MS-SQL支持自动IDS - 它称他们为Identity columns

+1

谢谢!我将使用SQL Server Express。我使用它时会遇到这个问题,还是它也有一个自动编号的列? – Hauzron

+0

我收到了UniData和UniVerse的可怕回忆。 –

+1

@Hauzron SQL Server支持自动递增字段。 – Phylogenesis

0
  • 生成一个随机ID
  • 检查表中的所有记录,以确保不具有相同的ID。
  • 如果它是唯一的使用该ID。否则,生成一个新的ID。

我希望你看到这种方法的问题。行数越多,插入数据的时间就越长。

否则,如果你没有一个自动递增ID的标准方法是这样的:

select (count(*) + 1) as newId from mytable 
相关问题