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

では、insert 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);
   }
于 2012-04-10T15:26:17.860 に答える
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 に答える