是asp.net中安全的静态方法

时间:2011-05-13 18:58:00

标签: asp.net function shared

嘿,伙计们, 我有一个网站,其中包含大量数据库工作以在页面上显示数据,因此我在App_Code下创建了一个公共的VB类。

现在我拥有该类下的所有方法和函数都是Shared(Static),我也有一个连接变量也是静态的。

客户抱怨,有时在页面上出现错误,其中一个错误是字段名称不属于表格表格,我不明白,关于此,因为这是非常罕见的,如果没有名称字段,这应该每次都会发生,我的一位同事说不应该有共享方法或功能......这是正确的..

2 个答案:

答案 0 :(得分:1)

听起来,我有一个不经常使用的SQL语句,它引用了一个表中不存在的列。

例如 - 假设你有这样的SQL

SELECT Col4 FROM Table2

和Col4不是Table2的成员。你会得到你描述的错误。

如果您正在动态构建SQL(这很狡猾),您可能会遇到这种情况。

但我认为这与你的方法“安全性”无关。

答案 1 :(得分:1)

静态方法没有“安全”问题。你的同事很困惑。您编写的代码是静态的还是实例方法取决于它的确切含义。但是将它们作为静态方法并不是“危险的”。

我建议您跟踪导致问题的查询,因为该方法当然不是问题。

就您的连接而言,我不建议将其保留为静态变量。我假设这是一个SqlConnection,或类似的东西。在这种情况下,如果将其保留为静态变量,则可能发生以下情况:

  • 即使在您完成使用后,您的连接也永远不会关闭。
  • 如果您有多个查询同时尝试使用该连接,则会出现问题。

因此,我建议您使用以下模式,以确保您的连接只在使用时保持打开状态。

public void DoSomething()
{
    //Doing some work that doesn't need a connection.

    //Now ready to submit or fetch data from the database.
    using (SqlConnection connection = new SqlConnection(...))
    {
        using (SqlCommand command = new SqlCommand(..., connection))
        {
            //Now, working with the connection and command.
        }
    }

    //Done with the connection, doing more work now.
}

using statement适用于任何IDisposable。此处的connection变量将在using语句的结束括号中自动关闭并销毁。我建议您将它用于任何可以做到的事情。 Stream s,SqlConnection s,Font s等