heys guys, 我有一个网站,其中包含很多数据库工作,以显示页面上的数据,所以我创建了一个公共的VB类,在App_Code下。是在asp.net中安全的静态方法
现在我已经在该类下的所有方法和函数都是Shared(静态),我也有一个也是静态的连接变量。
客户抱怨,有时候在页面上出现错误,其中一个错误是字段名称不属于表格,我不明白,关于这个,因为这是非常罕见的,如果没有字段与名称,那么这应该发生每一次,我的同事之一说,不应该有共享的方法或功能......这是正确的..
heys guys, 我有一个网站,其中包含很多数据库工作,以显示页面上的数据,所以我创建了一个公共的VB类,在App_Code下。是在asp.net中安全的静态方法
现在我已经在该类下的所有方法和函数都是Shared(静态),我也有一个也是静态的连接变量。
客户抱怨,有时候在页面上出现错误,其中一个错误是字段名称不属于表格,我不明白,关于这个,因为这是非常罕见的,如果没有字段与名称,那么这应该发生每一次,我的同事之一说,不应该有共享的方法或功能......这是正确的..
静态方法没有“安全”问题。你的同事感到困惑。您编写的代码是否应该是静态或实例方法取决于它究竟做了什么。但将它们作为静态方法并不“危险”。
我建议你跟踪导致问题的查询,因为静态方法当然不是问题。
至于你的连接,我不会建议保持它作为一个静态变量。我认为这是一个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等
这听起来像你有一个不常用的SQL语句引用表格中不存在的列。
例如 - 假设你有SQL像这样
SELECT Col4 FROM Table2
和COL4不表2中的一员。你会得到你描述的错误。
如果你正在动态地构建SQL(这是个傻瓜),你可能会遇到这个问题。
但我认为这与您的方法的安全性无关。
同意。 @Abbas,你需要捕捉并记录错误。这可能是你忘记存在的sproc中的“IF”条件。 – 2011-05-13 19:01:13
我想知道是否使连接对象静态,并通过类在不同的页面调用它:custom.connection 是否有任何问题使连接变量静态。 – Abbas 2011-05-13 20:16:04
是的,我会更新我的答案。 – 2011-05-13 20:51:27