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