记录SqlDataAdapter C#的每条语句

Log each statement of SqlDataAdapter C#

在 C# 中使用 .Update() 方法时,是否可以准确记录 SqlDataAdapter 在 mysql 数据库上执行的每个单独语句?

(无需使用 SQLProfiler 或任何其他第三方程序,而是纯 C# 代码)

你可以handle the DataAdapter events喜欢RowUpdatingRowUpdated

因此对于您的 MySql 数据库:

void OnRowUpdated(object sender, MySqlRowUpdatedEventArgs args)
{
    string sql = args.Command.CommandText;
    bool isStoredProcedure = args.Command.CommandType == CommandType.StoredProcedure;
    foreach (MySql.Data.MySqlClient.MySqlParameter p in args.Command.Parameters)
    {
        string paramName = p.ParameterName;
        DbType dbType = p.DbType;
        MySqlDbType dbType2 = p.MySqlDbType;
        object value = p.Value;
    }
}

插入、更新或删除的每一行都会触发这些事件。

这是我解决问题的方法,我想我会把它分享给任何寻找想法的人。

    #region generate SQL Update Script
    static void da_RowUpdating(object sender, SqlRowUpdatingEventArgs e)
    {
        string sqlCommand = e.Command.CommandText;

        for (int i = 0; i < sqlCommand.Length; i++)
        {
            string substring = "";
            string paramvalue = "";

            int check = 0;
            int index = 0;

            substring = sqlCommand.Substring(i, 1);
            if (substring == "@")
            {
                if (Int32.TryParse(sqlCommand.Substring(i + 3, 1), out check))
                {
                    index = Convert.ToInt32(sqlCommand.Substring(i + 2, 2));
                    paramvalue = e.Command.Parameters[Convert.ToInt32(sqlCommand.Substring(i + 2, 2)) - 1].Value.ToString();
                    sqlCommand = sqlCommand.Remove(i, 4);
                }
                else
                {
                    index = Convert.ToInt32(sqlCommand.Substring(i + 2, 1));
                    paramvalue = e.Command.Parameters[index - 1].Value.ToString();
                    sqlCommand = sqlCommand.Remove(i, 3);
                }
                sqlCommand = sqlCommand.Insert(i, paramvalue);
            }
        }
        sw.WriteLine(sqlCommand);
        sw.Flush();
    }
    #endregion generate SQL Update Script