Visual Studio 中資料存取的疑難排解

更新:2007 年 11 月

本主題列出在 Visual Studio 存取資料時,所發生的常見問題。

在執行階段時無法存取但在設計階段可以存取的資料庫

這種情況最有可能是由於在執行階段時傳送的使用者名稱和密碼存取資料庫遭拒的結果。解決方式是依據正在資料庫中使用的使用權限和使用權限方法以及連接字串而定。

這個問題的可能原因是:

  • 當完成新增/修改連接對話方塊 (一般) 時,選取 [使用特定使用者名稱和密碼] 選項而不選取 [允許儲存密碼] 選項。在這個案例中,當在設計階段嘗試連接資料來源時,會提示您輸入使用者名稱和密碼。對於執行階段連接而言,您需要將功能合併到應用程式中,將適當使用者名稱和密碼傳送至資料來源。

需要檢查的事項有:

  • 確認應用程式正在使用的使用者名稱和密碼具有存取資料來源的適當使用權限。

  • 確認使用者在資料庫中具有正確的使用權限設定。

  • 確認執行應用程式的電腦和資料來源之間有網路連接。

執行 SQL 命令時傳回不正確或遺漏了輸出參數

這種情況最有可能是因為參數的 Direction 屬性設定不正確所造成。參數的 Direction 屬性是設為在 ParameterDirection 列舉型別中所定義的值。

  • 確認參數的 Direction 屬性是設為可以接收資料 (輸出參數的輸出) 的值。

  • 確認參數的資料型別和預期傳回值的資料型別是相同的。

    注意事項:

    在資料流結尾會傳回輸出參數,因此,如果您使用 DataReader 物件 (例如 SqlDataReader),您必須先將它關閉或是讀至資料結尾之後,才能夠看見輸出參數。

如需未經傳回之輸出參數的詳細資訊以及程式碼範例,請在 Microsoft 產品支援服務網站 (https://support.microsoft.com) 上搜尋 Q308051。

取得「.Net Data SQL Provider (System.Data.SqlClient) 需要 Microsoft Data Access Components (MDAC) 2.6 (含) 以後版本」錯誤

Microsoft Windows Software Development Kit (SDK) 和 .NET Framework 可轉散發套件並不包括 MDAC 安裝。所有使用資料存取功能的 .NET Framework 應用程式都必須要有 MDAC 2.6 (含) 以後版本 (建議使用 MDAC 2.8 SP1)。MDAC 的最新版本可從 Microsoft 網站 (https://www.microsoft.com/taiwan) 下載。

由於 Visual Studio 預設會安裝 MDAC,所以在部署到沒有安裝 Visual Studio 的電腦時,很可能就會發生這個錯誤。

在部署應用程式時,可以讓安裝程式檢查正在進行部署的電腦上的 MDAC 版本。如需詳細資訊,請參閱 HOW TO:新增 Microsoft Data Access Components 的啟動條件

取得當嘗試認可或復原交易時的非預期例外狀況

當資料來源的錯誤導致交易立即遭到復原時,應用程式可能會發生以下其中一個錯誤:

  • 「COMMIT TRANSACTION 要求沒有對應的 BEGIN TRANSACTION」。

  • 「ROLLBACK TRANSACTION 要求沒有對應的 BEGIN TRANSACTION」。

雖然這個行為是經過設計的,不過最好還是從 Try...Catch 陳述式中呼叫存取外部資料來源的方法 (如 Commit 和 Rollback 方法)。如需詳細資訊,請參閱 HOW TO:使用 Try/Catch 區塊攔截例外狀況 (Visual Basic) 或 try-catch (C# 參考)

當嘗試從資料集移除資料表時取得 InvalidOperationException

當資料集繫結到 XmlDataDocument 後,呼叫 Clear 方法就會擲回下列例外狀況:

System.InvalidOperationException:一旦資料集對應至載入的 XML 文件時,就無法從資料集加入或移除資料表。

從繫結到 XmlDataDocument 物件的資料集清除資料時,必須要巡覽到該資料表並移除個別的 DataRow 物件。如需從資料表移除資料列的詳細資訊,請參閱 HOW TO:刪除 DataTable 中的資料列DataRowCollection.RemoveAt 方法

從資料來源視窗拖曳項目時標題標籤不正確

當您從 [資料來源] 視窗拖曳項目時,資料行名稱就會根據預設的規則運算式 (Regular Expression) 進行修改。如果資料行名稱含有小寫字元且後面接著大寫字元,就會加入一個空格以分隔成兩個字。此外,資料行名稱中的所有底線都會取代成空格。如需控制這項行為的詳細資訊,請參閱 HOW TO:自訂 Visual Studio 為資料繫結的控制項建立標題的方式

擷取及顯示資料的動作似乎很緩慢

如果專案使用 BindingSource 元件,請嘗試將 RaiseListChangedEvents 設定為 False。如此將會讓 ListChanged 事件不要出現在清單上,也可以提升大型資料集的效能。

安裝於 Windows 2000 之後,應用程式失敗並警告需要 MDAC 2.8

任何參考 System.Data 命名空間的應用程式,都需要 Microsoft Data Access Components (MDAC) 2.8 (含) 更新版本。在多數情況下,該檔案已安裝成為作業系統的一部分。對於執行 Windows 2000 Service Pack3 (含) 之前版本的電腦,在安裝應用程式時,可能需要一併安裝該元件。您可將該元件加入至啟動載入器 (Bootstrapper) 套件,並在安裝期間從 Microsoft 下載檔案,即可達到此目的。如需詳細資訊,請參閱部署必要條件 (Visual Studio)

資料庫針對插入或更新作業而產生的值,會對 LINQ to SQL 類別傳回 NULL

LINQ to SQL 會自動針對識別 (自動遞增)、rowguidcol (資料庫產生的 GUID) 和時間戳記資料行處理資料庫產生的值。其他資料行型別的資料庫產生值將產生非預期的 null 值。若要傳回資料庫產生的值,您應該手動將 IsDbGenerated 設定為 true,並將 AutoSync 設定為下列其中一項:AlwaysOnInsertOnUpdate

請參閱

概念

資料的新功能

顯示資料概觀

其他資源

資料逐步解說

資料存取使用者入門

連接至 Visual Studio 中的資料

準備您的應用程式以接收資料

將資料擷取至您的應用程式中

顯示 Windows 應用程式之表單上的資料

在您的應用程式中編輯資料

驗證資料

儲存資料

LINQ to SQL