现在我拥有该类下的所有方法和函数都是Shared(Static),我也有一个连接变量也是静态的。
客户抱怨,有时在页面上出现错误,其中一个错误是字段名称不属于表格表格,我不明白,关于此,因为这是非常罕见的,如果没有名称字段,这应该每次都会发生,我的一位同事说不应该有共享方法或功能......这是正确的..
答案 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等