是否有可能我的程序中的更改有时不适用,因为我的 SQL 服务器数据库比我的程序慢?

Is it possible that changes in my program sometimes does not apply because my SQL Server database is slower than my program?

我使用此代码来确定文章的下一个 ID。因此,如果我要向我的数据库中添加一篇新文章,那么它将收到该 ID。

但有时删除文章时ID号错误有时不是(与删除功能的代码无关)

try
{
    string s = "select max(Id) as Id from dbo.Artikelen";

    SqlCommand cmd = new SqlCommand(s, con);
    con.Open();

    SqlDataReader dr = cmd.ExecuteReader();
    dr.Read();

    int i = Convert.ToInt32(dr["Id"].ToString());

    labelArtikelID.Text = (i + 1).ToString();
    con.Close();
}
catch (Exception ex)
{
    MessageBox.Show(ex.Message);
}

显然,如果您的 Id 列是自动递增的,它会像这样工作,我想您需要从 Id 字段中删除自动递增 属性 并手动输入这可能对您有帮助

这段代码似乎是试图检索自动生成的 ID。只有在 INSERTSELECT 之间没有其他人插入或删除行时,MAX +1 才会起作用。这在实际应用中是极不可能的。

检索新 ID 的最简单方法是在 INSERT 语句本身中添加 OUTPUT clause,然后检索 returned ID。

INSERT INTO Artikeln(...)
OUTPUT inserted.ID
VALUEs(...)

使用 ExecuteScalar 执行 INSERT 命令将 return 新 ID。

IDENT_CURRENT('tablename') 应该用于检索 table 的 当前 身份值,例如:

SELECT IDENT_CURRENT('dbo.Artikeln') AS CurrentID;

删除新条目意味着 MAX(ID) 将 return 最新条目之一的 ID,甚至不是当前标识值。