Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Muss die skalare Variable @ID für den Einfügeparameter deklarieren

Das Problem ist immer noch, dass Sie versuchen, denselben "Bereich" mit zwei verschiedenen SQL-Befehlen zu verwenden. Obwohl sie in C# dieselbe "Variable" sind, haben sie in SQL einen anderen Gültigkeitsbereich.

Sie müssen beide Anweisungen in einem Befehl ausführen und die @ID hinzufügen Parameter als Output Parameter, um die Identität einzufügen und herauszuholen:

nonqueryCommand.CommandType = CommandType.Text;
nonqueryCommand.CommandText = "INSERT tblLoginLogTable (UserName, LoggedInDate, LoggedInTime) VALUES (@UserName, @LoggedInDate, @LoggedInTime); " + 
                              "SELECT @ID = SCOPE_IDENTITY()";
nonqueryCommand.Parameters.AddWithValue("@UserName", txtUserName.Text);
nonqueryCommand.Parameters.AddWithValue("@LoggedInDate", DateTime.Now);
nonqueryCommand.Parameters.AddWithValue("@LoggedInTime", DateTime.Now);
nonqueryCommand.Parameters.Add("@ID",SqlDbType.Int).Direction = ParameterDirection.Output;

thisConnection.Open();
nonqueryCommand.ExecuteNonQuery(); 

int id = (int)nonqueryCommand.Parameters["@ID"];