检查主键分配

时间:2012-04-10 14:36:06

标签: c# asp.net sql

我有一个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();
}

2 个答案:

答案 0 :(得分: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/

答案 1 :(得分:1)

好的,所以如果你的插入sproc看起来像:

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);
   }