gpt4 book ai didi

c# - 遍历 DbCommand 中的参数

转载 作者:行者123 更新时间:2023-11-30 14:56:11 25 4
gpt4 key购买 nike

我正在尝试拦截所有 SQL 命令并将其记录到数据库中。我还需要参数及其值。但是 command.Parameters 没有 IEnumerable。我可以使用 for-statement,但感觉有点像倒退。

public override void ScalarExecuted(DbCommand command, DbCommandInterceptionContext<object> interceptionContext)
{
_stopwatch.Stop();
if (interceptionContext.Exception != null)
{
_logger.Error(interceptionContext.Exception, "Error executing command: {0}", command.CommandText);

string param = string.Empty;

if (command.Parameters.Count > 0)
{
foreach (var t in command.Parameters)
{
param += t....
}
}

Log log = new Log()
{
Date = DateTime.UtcNow,
LogLevel = LogLevel.Error,
Message = command.CommandText + "\r\n " + param.
};
}
else
_logger.TraceApi("SQL Database", "CommandInterceptor.ScalarExecuted", _stopwatch.Elapsed, "Command: {0}: ", command.CommandText);

base.ScalarExecuted(command, interceptionContext);
}

我需要构建一个 string(我知道我应该使用 StringBuilder 代替 string 作为 param,但为了问题的缘故,我想保持简单),以便我可以将它传递给 LogMessage 属性。

此代码略有调整并取自this博客。

最佳答案

你可以把它变成一个列表...

StringBuilder sb = new StringBuilder();

command.Parameters.Cast<DbParameter>()
.ToList()
.ForEach(p => sb.Append(
string.Format("{0} = {1}{2}",
p.ParameterName,
p.Value,
Environment.NewLine)));

Console.WriteLine(sb.ToString());

关于c# - 遍历 DbCommand 中的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23438236/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com