31. december 2005 - 13:13Der er
26 kommentarer og 1 løsning
Rows affected vs. newID
Hej eksperter.
Jeg har brug for at få det nye PartID tilbage når jeg indsætter i databasen. Jeg får imidlertid altid returneret '1', hvilket minder mere om rows affected. min sql ser således ud:
public int CreatePartAttributes(string partNo, int partSpec, int component, int value1, int type, int rating, int grade, int pkg, int package, int mount, int category, int user, int project, int status, int symbol) { string SQLTING = "INSERT INTO tblPart (PartNumber, k_PartspecID, k_ComponentID, k_valueID, k_TypeID, " + "k_RatingID, k_GradeID, k_Pkg_TypeID, k_MountID, k_CategoryID, k_UserID, k_ProjectID, " + "k_PartstatusID, k_SymbolID, Date)" + "VALUES (@PartNumber, @k_PartspecID, @k_ComponentID, @k_valueID, @k_TypeID, @k_RatingID, @k_GradeID, @k_Pkg_TypeID, @k_MountID, @k_CategoryID, @k_UserID, @k_ProjectID, @k_PartstatusID, @k_SymbolID, @Date)" + "SELECT @@IDENTITY AS 'PartID'"; //@@IDENTITY selects the id of the new row, see link or doc. //http://msdn.microsoft.com/library/default.asp?url=/library/en-us/tsqlref/ts_globals_50u1.asp
SqlCommand ins = new SqlCommand("INSERT ...", conn); ins.ExecuteNonQuery(); SqlCommand sel = new SqlCommand("SELECT @@IDENTITY", conn); int id = (int)sel.ExecuteScalar();
public int CreatePartAttributes(string partNo, int partSpec, int component, int value1, int type, int rating, int grade, int pkg, int package, int mount, int category, int user, int project, int status, int symbol) { string SqlInsert = "INSERT INTO tblPart (PartNumber, k_PartspecID, k_ComponentID, k_valueID, k_TypeID, " + "k_RatingID, k_GradeID, k_Pkg_TypeID, k_MountID, k_CategoryID, k_UserID, k_ProjectID, " + "k_PartstatusID, k_SymbolID, Date)" + "VALUES (@PartNumber, @k_PartspecID, @k_ComponentID, @k_valueID, @k_TypeID, @k_RatingID, @k_GradeID, @k_Pkg_TypeID, @k_MountID, @k_CategoryID, @k_UserID, @k_ProjectID, @k_PartstatusID, @k_SymbolID, @Date)", // + string SqlSelect = "SELECT @@IDENTITY AS 'PartID'"; //@@IDENTITY selects the id of the new row, see link for doc. //http://msdn.microsoft.com/library/default.asp?url=/library/en-us/tsqlref/ts_globals_50u1.asp
SqlCommand commandInsert = new SqlCommand(SqlInsert, this.connection) SqlCommand commandSelect = new SqlCommand(SqSelect, this.connection)
ifølge microsoft skal det være 'PartID' men det virker osse uden gnyffer.
Jeg bruger return Convert.ToInt32(commandInsert.ExecuteNonQuery()); da jeg mener den returnerer en 32 bit int. men return (int)(long)commandSelect.ExecuteScalar(); virker osse.
men uanset hvad jeg gør returnerer den stadig '1'. Jeg har tjekket at der bliver skrevet i databasen - det går fint. Når jeg læser om SELECT @@IDENTITY kan jeg se at den returnerer værdien på den indsatte række ellers NULL. Når nu PartID > 11000 i databasen kan jeg stadig fatte hvorfor den returnerer '1'....
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.