J'ai besoin de toutes les modifications comme les insertions, les mises à jour et les suppressions à une table pour être auditées, et j'utilise SQLDataSource et GridView avec INSERT générées automatiquement./UPDATE/DELETE instructions. Le problème est, quand une ligne est mise à jour, je veux obtenir l'ID (clé primaire) et le mettre dans la table d'audit - mais parce que les seuls paramètres pour la requête UPDATE sont les données réelles et non la clé primaire, je ne sais pas comment accéder à cette information. Voici ma requête UPDATE:Renvoi PK de gridview lors de la mise à jour ou de l'insertion (ASP.NET, C#)
InsertCommand="INSERT INTO [NominalCode] ([VAXCode], [Reference], [CostCentre], [Department], [ReportingCategory]) VALUES (@VAXCode, @Reference, @CostCentre, @Department, @ReportingCategory)"
Et voici le codebehind pour auditting:
protected void SqlDataSource1_Updating(object sender, SqlDataSourceCommandEventArgs e)
{
string fields = e.Command.Parameters[0].Value.ToString() + "," + e.Command.Parameters[1].Value.ToString() + "," + e.Command.Parameters[2].Value.ToString() + "," + e.Command.Parameters[3].Value.ToString() + "," + e.Command.Parameters[4].Value.ToString();
System.Security.Principal. WindowsPrincipal p = System.Threading.Thread.CurrentPrincipal as System.Security.Principal.WindowsPrincipal;
string[] namearray = p.Identity.Name.Split('\\');
string name = namearray[1];
string queryString = "INSERT INTO Audit (source, action, item, userid, timestamp) VALUES (@source, @action, @item, @userid, @timestamp)";
using (SqlConnection connection = new SqlConnection("con string removed for privacy"))
{
SqlCommand command = new SqlCommand(queryString, connection);
command.Parameters.AddWithValue("@source", "Nominal");
command.Parameters.AddWithValue("@action", "Update");
command.Parameters.AddWithValue("@item", fields);
command.Parameters.AddWithValue("@userid", name);
command.Parameters.AddWithValue("@timestamp", DateTime.Now);
connection.Open();
try
{
command.ExecuteNonQuery();
}
catch (Exception x)
{
Response.Write(x);
}
finally
{
connection.Close();
}
}
}