【问题标题】:Using SQLCommand - Will it dispose of items passed to strings?使用 SQLCommand - 它会处理传递给字符串的项目吗?
【发布时间】:2012-05-04 10:39:55
【问题描述】:

我正在使用“使用”命令为我处理/关闭连接进行一些 SQL 连接。如果我从 using 命令中将项目传递给字符串,它们会在连接关闭/处理后保留吗?

如果是这样,确保项目保留在字符串中而不是被丢弃以便我以后可以使用它们的最佳方法是什么。

【问题讨论】:

  • 显示一些代码以了解您在做什么以及做错了什么??

标签: c# dispose sqlcommand


【解决方案1】:

字符串总是按值传递。所以,如果我正确理解你的问题,你的字符串应该保持不变。 using 语句只会释放命令。

【讨论】:

  • 感谢您确认我的怀疑,只是想澄清一下。
【解决方案2】:

如果我理解正确,您的意思是作为命令参数传递的对象?据我所知,当命令被释放时,它们并没有被释放。确保正确处理它们的最简单方法是手动访问 SqlCommand.Parameters

例如,您可以使用以下代码。

if (command.Parameters != null)
{
    foreach (object parameter in command.Parameters)
    {
        IDisposable disposableParameter = parameter as IDisposable;
        if (disposableParameter != null)
        {
            disposableParameter.Dispose();
        }
    }
}

【讨论】:

    【解决方案3】:

    我认为你搞砸了几个概念。 当你构造一个 SQL 查询时,你有 2 个选项,使用字符串构造它,例如:

    "Select from " + TableName + " where " + ColumnName + "=" + ColumnValue ...
    

    非常糟糕!永远不要这样做,您必须使用参数,例如:

    "Select from " + "TableName + " where " + ColumnName + "=@Value"
    

    然后使用SqlParameter 注入感兴趣的值。

    在这两种情况下,实际值的生命周期都与 SQL 字符串无关。 值生命周期取决于您如何使用保存该值的变量。

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-05
      相关资源
      最近更新 更多