我有一个存储视频游戏细节的数据库。表名是游戏&它的主键是'gameNo',它是字母数字(例如G1,G2,G3 ......等)。我想检索最后输入的游戏号码,以便在输入时为下一个游戏生成游戏号码。当我使用时,
this.cmd = new OleDbCommand("SELECT MAX(gameNo) FROM games",this.con.conObj());
我的结果不正确。例如,如果有像G2和&amp ;;这样的gameNo值。 G190,我想要检索G190,而不是G2。如有任何帮助,将不胜感激。我是学生&如果可能的话,一个好的解释也将是一个巨大的帮助。提前致谢。顺便说一下,我正在使用Visual C#。
答案 0 :(得分:3)
这是将密钥存储为varchar列的结果。
我会从数字中分离出'G'并有两列。如果它总是'G',那么你甚至不需要两列。
此外,您还有另一个问题,即使用SELECT MAX(gameNo) FROM games
获取最后一个游戏号码所导致的问题。如果此系统是多用户系统,则两个用户可以获得相同的号码。您没有提到您使用的数据库,但所有数据库都可以让您安全地获得游戏的唯一ID。
我会有一个类似的表(这是针对SQL Server的,但你会得到这个想法。
CREATE TABLE Games(
GameID int IDENTITY(1,1),
...Other Columns,
CONSTRAINT PK_Games PRIMARY KEY CLUSTERED(GameID))
然后,当您为游戏创建新行时,数据库将处理为您提供新的GameID。
答案 1 :(得分:0)
老实说,虽然肯定有解决方案来解析查询中的gameNo
,但我强烈建议使用{{1}更改数据库模型以使用正确的自动递增主键。而是数据类型。
答案 2 :(得分:0)
这里有几个问题。一个是因为gameNo是字母数字并不意味着 last 记录是最大的值。您必须详细说明此列中的值如何自动递增。另一个问题是什么是“最大”。使用字母数字,将值作为测试进行比较,而不是数字。所以,'3'将在'1a'之前出现。