2010-03-30 36 views
4

我有一个填充的SqlCommand对象,其中包含各种数据库类型的命令文本和参数及其值。我需要的是一个T-SQL脚本,我可以简单地执行这个脚本,它具有与在命令对象上调用ExecuteNonQuery方法相同的效果。是否可以轻松地将SqlCommand转换为T-SQL字符串?

有没有简单的方法来做这样的“脚本转储”,或者我必须从命令对象手动构建这样的脚本?

+0

据我所知没有这样的函数,我担心你必须通过将SqlCommand对象传递给(静态)方法来自己写这样的东西。 – Fabian 2010-03-30 08:55:12

回答

4

我不认为你可以直接从SqlCommand对象中获得完整的sql语句。如果你记录所有发送到你的sql服务器的命令,你会看到传递的命令文本与你的SqlCommand对象的命令文本相同。参数值分别传递。

所以我认为你唯一的选择是自己构建命令文本。这真的很容易;您从SqlCommand的CommandText开始,遍历Parameters集合,用参数值(转义)替换参数占位符。这应该会导致一个完整的SQL查询,它可以完成你所追求的任务。

+0

听起来不错,但有没有简单的方法来逃避这些价值? – 2010-03-30 08:58:40

+0

+1。使用此方法记录SQL异常以包含“TSQL脚本”转储,准备好复制和粘贴以便在SSMS中手动/调试 – AdaTheDev 2010-03-30 09:16:44

+0

如果传递复杂类型(如Blob或xml数据),则转义它们将很困难。但是,假设你传递了简单的值,如varchars和数字,它应该像包含撇号(')中的值一样简单,并用doulbe替换任何包含的撇号(用'替换')。有一点需要注意的是日期。它们必须格式正确,但我现在不记得excact格式。 – 2010-03-30 09:29:59

相关问题