0

我有一个 Web 应用程序,它写入多个数据库以跟踪员工变更请求。我在输入新员工时遇到了问题。它们首先被写入主Employee数据库,然后它们的访问信息被写入EMP_ID作为主键的其他数据库。当它写入其他数据库时EMP_ID已经生成,所以它被输入为0。

为了解决这个问题,我试图循环并检查EMP_ID值,直到生成一个值,但我继续陷入循环,因为查询返回没有找到任何值。

while (int.Parse(empIDChecker) == 0)
{
   dbConnection.Open();
   validateIDSQLString = "SELECT EMP_ID FROM EMPLOYEE_TABLE WHERE FIRST_NAME = '" +        firstNameTextBox.Text.Trim() + "' AND LAST_NAME = '" + lastNameTextBox.Text.Trim() + "'";

   SqlCommand updateSQLCmd = new SqlCommand(validateIDSQLString, dbConnection);
   SqlDataReader getRecords = updateSQLCmd.ExecuteReader();

   try
   {
       empIDChecker = getRecords["EMP_ID"].ToString();
   }
   catch
   {
       empIDChecker = "0";
   }

   getRecords.Close();
   dbConnection.Close();
}
4

2 回答 2

1

您可以使用

SELECT IDENT_CURRENT(‘tablename’)

这将为您提供最后插入的表的自动增量 ID,您可以使用它来插入其他表

检查此链接以及http://blog.sqlauthority.com/2007/03/25/sql-server-identity-vs-scope_identity-vs-ident_current-retrieve-last-inserted-identity-of-record/

于 2012-04-10T15:00:57.997 回答
1

好的,所以如果您的插入存储过程看起来像:

sp_InsertEmp
...

INSERT INTO Emp(Name, etc...)
VALUES ('Paul', etc...)

SELECT SCOPE_IDENTITY() AS EMP_ID

GO

在您的代码中:

   SqlCommand insertCmd = new SqlCommand("sp_InsertEmp", dbConnection);

   ... Add parameters here and set type to StoredProcedure

   SqlDataReader dr= insertCmd.ExecuteReader();
   int newId;

   if (dr.Read())
   {
     newId = dr.GetInteger(0);
   }
于 2012-04-10T15:26:17.860 回答