2

我想用参数值将 sql 命令写入文本文件。以下是我用适当的值替换参数的代码。

string commandText = commandInfo.CommandText;

if (commandInfo.Parameters.Count > 0)
{
    foreach (SqlParameter parameter in commandInfo.Parameters)
    {
        commandText=commandText.Replace(parameter.ParameterName,parameter.Value==(object)DBNull.Value?(object)DBNull.Value:("'"+parameter.Value.ToString()+"'"));
    }
}

问题是,尽管所有其他参数值都被正确替换了。那些具有空值的值被视为空白,即“parameter1”、“param2”

两者之间是最终字符串中的空值参数。

有什么替代方案?

4

1 回答 1

1

坦率地说,用值替换参数是(IMO)错误的做法;我们在mini-profiler中所做的是在输出顶部欺骗declare语句,以便您可以将其复制并粘贴到 SSMS 中,而无需担心什么是参数以及原始 TSQL 中硬编码的内容。例如,查看此页面的迷你分析器输出,我看到

DECLARE @id int = 18121022,
        @type tinyint = 10;

(然后是很多对我们来说非常具体的 tsql)

你可以看一下迷你分析器代码,看看我们是如何输出这个的,但基本上它只涉及遍历参数,编写一个简单的declare. 如果您使用的是 ASP.NET 之类的东西,mini-profiler 还避免了编写文件的需要(而是使其在网站上实时可用,供您的开发人员使用)。

于 2013-08-08T08:29:48.697 回答