Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Doit déclarer la variable scalaire @ID pour le paramètre d'insertion

Le problème est toujours que vous essayez d'utiliser la même "portée" avec deux commandes SQL différentes. Même s'ils sont la même "variable" en C # en SQL, ils ont une portée différente.

Vous devrez exécuter les deux instructions en une seule commande et ajouter le @ID paramètre en tant que Output paramètre afin d'insérer et d'extraire l'identité :

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"];