J'ai une requête d'insertion comme ci-dessous. Cependant, scopeIdentity
ne retourne pas 42, il retourne 1042.SCOPE_IDENTITY() renvoie le nombre mille
C'est la table SQL Server:
Mon code:
int masterId = 0;
using (SqlConnection cmd = new SqlConnection(connString))
{
using (SqlCommand conn = cmd.CreateCommand())
{
conn.CommandText = "INSERT INTO[MasterReportData]([ReportName],[CaseList],[EmployeeId],[datetime]) VALUES(@reportName, @caseList, @employeeId, @datetime) SET @ID = SCOPE_IDENTITY()";
conn.Parameters.Add("@reportName", SqlDbType.VarChar).Value = reportName;
conn.Parameters.Add("@caseList", SqlDbType.VarChar).Value = caseList;
conn.Parameters.Add("@employeeId", SqlDbType.Char).Value = employeeId;
conn.Parameters.Add("@datetime", SqlDbType.DateTime).Value = datetime;
conn.Parameters.Add("@ID", SqlDbType.Int).Direction = ParameterDirection.Output;
cmd.Open();
conn.ExecuteNonQuery();
masterId = Convert.ToInt32(conn.Parameters["@ID"].Value);
cmd.Close();
}
}
points-virgules manquants; ? pourquoi pensez-vous qu'il devrait revenir 42? même si la dernière rangée était '41', des insertions ou des suppressions annulées auraient pu faire avancer le compteur –
Donc, si vous regardez dans la base de données, quelle valeur a été réellement insérée? Les sauts de 1000 dans les colonnes d'identité sont assez communs (depuis 2012, IIRC) et, de toute façon, si vous vous souciez de la * valeur numérique réelle *, je dirais que vous utilisez l'erreur d'identité. –
Vérifiez la valeur actuelle de votre colonne d'identité sur cette table avec: 'SELECT IDENT_CURRENT ('MasterReportData')' - que retourne-t-il? –