列 不屬於 表

異常的特點:
一:最大的特點是隨機性。會突然報錯,說不定是什麼時候,有可能是你下一個點擊,或者刷新一下頁面之後,總之就是出現在數據庫有聯繫的地方(查詢,綁定數據控件時)。
二:報錯的多樣性。一報錯後,千奇百怪的錯誤也就噴井式爆發,如“列不屬於表”,“找不到表0”,“數據轉換不成功”等,各種各樣都有,但都是與數據庫的數據有關。
三:持續時間比較短。很多頁面報錯後,刷新幾次,或者是等一陣,又正常了,又可以使用了,但可能下一個點擊,刷新,就又報錯了
四:越多人使用,網絡情況越差,就越頻繁。我的系統在公司內部幾個開發人員測試沒有問題,但上線後,客戶公司很多人用,就不斷有這個錯。而且,有幾天網絡比較好,就沒有發生這錯,我以爲換了dbhelper已經搞掂了,但這幾天又繼續報錯。

 1、

法名: getList 異常信息: 列“productId”不屬於表 Table
lz我公司的網站不知道出現了多少次了,我以前也發過這樣的帖子,不過那個時候我解決了
原因是全局變量的問題,因爲我的sql是拼接的,而在一些方法中設置了那個全局變量的值,
然後第二次再調用其他方法,因爲字段被設置過,所以錯了,最後我把那個全局變量全部改成局部變量
就不會錯了。

NND,過一段時間又出現這樣的問題,以爲還是那個全局變量的問題,但是整個項目都沒有全局變量了
現在還沒有解決這個問題,但從我的日誌記錄來看,1、我的項目的數據層都有記錄異常日誌,在頁面Global.aspx裏也有記錄異常日誌。而且數據層都是記錄日誌後拋出的,所以正常情況數據層出現錯誤的話
那麼就會有2個日誌記錄,一個是數據層的,該日誌有記錄參數的值,另一個是頁面的,該日誌直接記錄異常信息,但是每次都只有頁面的日誌,所以懷疑與數據綁定有關

 2、

SqlConnection 不要用全局或靜態或單例模式 , 否則會出現不同進程進下共用connection的情況 , 特別是在web環境下 , 這將導致使用者獲取的dataset不正確 , 從而引發上面我提出的問題 , 解決的方法是在需要做數據連接的地方new connection來使用 , 用後close , 這樣就可以避免出現類似於 “xxxxx不屬於表 Table ”等一系列的問題了。。。

 3、

這個問題可能是由於併發的時候取的數據出了問題,很難找出問題,所以,
最後在這個經常容易出錯的地方,加上try catch,然後在catch中加日誌,把這個表的所有字段列出來,看到底是什麼東西.

 4、

到數據庫裏看看日誌,出錯就會影響應用池,要重新啓動
是否是併發操作問題

 5、

呵呵,應該是併發問題導致數據超時
你可以將數據庫的連接池放大一些。

 6、

建議LZ將上線的東西加上一個日誌,因爲上線的東西有時錯誤是很難跟蹤的,那你看到的問題又不全面。。
之前因爲上線後網站出現問題,老大要原因,我說我也不知道,後來他才讓我加日誌跟蹤。
這樣以後出現問題都可以有據可查。我現在使用的是log4net

 7、

先確定下,你報的這些錯不屬於連接超時所帶來的問題。這些問題歸根結底的原因還是在與你代碼的問題。
1.加日誌記錄記錄SQL語句和連接字符串
2.查是否有垃圾數據
3.檢查代碼。(數據庫連接,你的DBHELPER,查詢語句)

8、
數據庫ADO.NET的連接操作不正確,我也遇到了這樣的問題,原來的DBHelp類中用的是靜態的一個Connection對象,現在不採用靜態的,在使用時全部重新創建對象,問題解決。
代碼如下:
  public static int ExecuteCommand(string safeSql)
        {
            using (SqlConnection Connection = new SqlConnection(connectionString))
            {

                SqlCommand cmd = new SqlCommand(safeSql, Connection);
                int result = cmd.ExecuteNonQuery();
                Connection.Close();
                return result;
            }
        }

 


本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/sollion/archive/2010/07/21/5753825.aspx

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章