是否有可能我的程序中的更改有时不适用,因为我的 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。只有在 INSERT
和 SELECT
之间没有其他人插入或删除行时,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,甚至不是当前标识值。
我使用此代码来确定文章的下一个 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。只有在 INSERT
和 SELECT
之间没有其他人插入或删除行时,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,甚至不是当前标识值。