В настоящее время я использую SqlDataSource в ASP.NET/C#, чтобы позволить пользователям вставлять, удалять и обновлять записи в таблице / сетке. Каждое событие должно быть записано в таблицу аудита.
Я легко реализовал вставку и удаление - при вставке проверяемой основной информацией являются только значения параметров запроса вставки (e.Command.Parameters [0] .Value.ToString () и т. Д.), И удаление в значительной степени то же самое (просто получение идентификатора в запросе на удаление).
Но при обновлении мне нужно регистрировать, какие поля были изменены, а также их старые значения. Как бы я это сделал? В качестве примера, вот код для вставки:
protected void SqlDataSource1_Inserting(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("constring - deleted for privacy "))
{
SqlCommand command = new SqlCommand(queryString, connection);
command.Parameters.AddWithValue("@source", "Nominal");
command.Parameters.AddWithValue("@action", "Insert");
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();
}
}
}
Как это можно сделать?