2011-05-13 30 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

相關問題