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

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

#1楼 票数:2

您可以处理DataAdapter事件,例如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;
    }
}

这些事件针对插入,更新或删除的每一行触发。

#2楼 票数:2 已采纳

这是我解决问题的方式,以为可以与任何想法的人分享。

    #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

  ask by hYde translate from so

未解决问题?本站智能推荐:

6回复

在C#中从数据库加载组合框

我正在创建一个应用程序,可以在其中添加客户的名字,姓氏,电子邮件,日期,服务类型(电脑维修),技术人员的电脑品牌,电脑类型,操作系统类型以及计算机问题。 我可以使用phpMyAdmin将数据插入MySQL数据库。 但是,我对这部分感到困惑。 我正在尝试查看刚刚创建的服务订单。 我想按客
2回复

C#和SqlDataAdapter[关闭]

我将数据收集到数据集并添加表,所以我将学习计算列数并编写texbox1 我不说sayi,但没有错误。怎么了?
1回复

SqlDataAdapter输出变量问题C#

我不清楚如何在使用C#时为输出变量格式化SqlDataAdapter 错误信息: 索引(从零开始)必须大于或等于零且小于参数列表的大小。 代码示例(存储过程正常)
1回复

SqlDataAdapter.Fill()“=”C#附近的语法不正确

我收到此错误 “ =”附近的语法不正确 我在网上遇到这个错误 我不知道我犯了什么错误。 我浏览了许多文章,但没有一篇可以帮助我解决问题。 数据库表看起来像 有人可以解决这个错误吗? 该代码中的错误到底在哪里?
4回复

c#在SqlDataAdapter中使用Parameters.AddWithValue

如何将 Parameters.AddWithValue 与 SqlDataAdapter 一起使用。 下面搜索代码。 我重写了这样的代码: 但它失败了。
2回复

在C#中使用SqlDataAdapter更新数据库

当单击按钮时,我有下面的代码更新我的数据库表,但是它不起作用。
2回复

SqlDataAdapter对象CommandTimeOut在C#中不起作用

我正在使用SqlDataAdapter从存储过程中提取结果,该过程最多需要 5 分钟才能执行并返回结果。 我正在使用 设置,但超时不起作用。 该代码并未真正遵守超时。 它更早失败。 知道如何解决这个超时吗? 这是我的代码:
2回复

C#SqlDataAdapter.Update()

我为此感到疯狂。 我做了ff: 创建一个数据表。 通过SqlDataAdapter从SQL数据库填充它。 通过datagridview编辑数据表。 调用sqldataadapter.update,但更改不会持久保存到数据库中。 仔细查看编辑后的数据表,即使我实际上通