如何从表适配器获取正在执行的 SQL 查询

本文关键字:执行 SQL 查询 获取 适配器 | 更新日期: 2023-09-27 18:35:34

可能的重复项:
如何从 SqlCommand-Object 获取生成的 SQL 语句?

我想知道如何检索由表适配器执行的 SQL 查询以进行日志记录。

例如:

输入:

RandomTableAdapter tableAdapter = new RandomTableAdapter();
tableAdapter.Insert("val","val","val","val");

输出:

我想记录的是插入语句,它由表适配器生成,以便执行插入命令。

Insert INTO RandomTable VALUES ('val', 'val', 'val', 'val');

我该怎么做?有人对此有任何建议吗?

如何从表适配器获取正在执行的 SQL 查询

您可以使用此解决方法将参数名称替换为其值但这并不好,因为您需要自己管理值格式,而且速度可能很慢
并且您需要在执行插入后获取参数

法典:

var usersTableAdapter = new testDataSetTableAdapters.usersTableAdapter();

            usersTableAdapter.Insert(4, "home", "origin", "email@host.com", "realname", "spec", 1, "username", "usernick", "whereform");
            var cmd = usersTableAdapter.Adapter.InsertCommand;
            var text = cmd.CommandText;
            var sb = new StringBuilder(text);
            foreach (SqlParameter cmdParam in cmd.Parameters)
            {
                if (cmdParam.Value is string)
                    sb.Replace(cmdParam.ParameterName, string.Format("'{0}'", cmdParam.Value));
                else
                    sb.Replace(cmdParam.ParameterName, cmdParam.Value.ToString());
            }
            Console.WriteLine(sb.ToString());