2011-05-13 32 views
0

heys guys, 我有一个网站,其中包含很多数据库工作,以显示页面上的数据,所以我创建了一个公共的VB类,在App_Code下。是在asp.net中安全的静态方法

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

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

回答

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等

+0

我想知道是否使连接对象静态,并通过类在不同的页面调用它:custom.connection 是否有任何问题使连接变量静态。 – Abbas 2011-05-13 20:16:04

+0

是的,我会更新我的答案。 – 2011-05-13 20:51:27

1

这听起来像你有一个不常用的SQL语句引用表格中不存在的列。

例如 - 假设你有SQL像这样

SELECT Col4 FROM Table2 

和COL4不表2中的一员。你会得到你描述的错误。

如果你正在动态地构建SQL(这是个傻瓜),你可能会遇到这个问题。

但我认为这与您的方法的安全性无关。

+1

同意。 @Abbas,你需要捕捉并记录错误。这可能是你忘记存在的sproc中的“IF”条件。 – 2011-05-13 19:01:13

相关问题