如何从表适配器获取执行SQL查询?

时间:2012-05-28 08:48:56

标签: c# sql tableadapter

  

可能重复:
  How to get the generated SQL-Statement from a SqlCommand-Object?

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

例如:

输入:

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

输出:

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

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

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

1 个答案:

答案 0 :(得分:1)

您可以使用此变通方法将ParameterName替换为其值 但这并不好,因为你需要自己管理价值格式,而且可能很慢 并且您需要在执行Insert之后获取参数

代码:

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