2010-10-07 25 views
0

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

Répondre

0

D'accord, je me sens stupide. L'ID était situé dans la clause WHERE de la requête SQL bien sûr! Et j'ai collé dans la commande INSERT pour une raison quelconque.