當您嘗試準備方法之前先呼叫您加入參數時的錯誤:"發生未處理的類型的例外狀況 'System.Data.SqlClient.SqlException' 發生 system.data.dll"

文章翻譯 文章翻譯
文章編號: 310368 - 檢視此文章適用的產品。
本文已封存。本文係以「現狀」提供且不會再更新。
本文章的有 Microsoft Visual C#.NET] 版本請參閱 311348

本文參照下列 Microsoft.NET Framework 類別庫命名空間:
  • System.Data.OleDb
  • System.Data.SqlClient
全部展開 | 全部摺疊

在此頁中

徵狀

當您建立參數型的命令對 Microsoft SQL Server 7.0,如果您新增參數至命令之前,呼叫 準備 方法時,您會收到下列錯誤訊息:
型別中 system.data.dll 'System.Data.SqlClient.SqlException' 發生未處理的例外狀況。
其他資訊: 系統錯誤。
在 SQL Server 2000 中,不會發生這個問題。

發生的原因

之所以發生這個問題,是 SQL Server 7.0 中因為,設計,您無法執行 準備 方法新增參數之前。這適用於大多數的資料庫系統。

因為它不會執行 準備 直到第一個命令執行 SQL Server 2000 不會產生上述的例外狀況。如果隨後執行沒有命令,此最佳化可防止 準備 的負擔。

解決方案

如果要解決這個問題,不要呼叫 準備 方法直到之後加入該參數。

其他相關資訊

重製行為的步驟

範例程式碼,請依照下列使用區域資料表的 [北風樣本資料庫。
  1. 啟動 Microsoft Visual Studio.NET。
  2. 建立新的 Visual Basic Windows 應用程式專案。 Form1 是根據預設值加入至專案。
  3. 請確定您的專案包含之 System.Data 命名空間的參考,然後加入這個命名空間的參考,如果不符合。
  4. 將放置在 Form1 上的 [按鈕] 控制項。將按鈕的 [名稱] 屬性變更為 btnTest,並將 文字 屬性變更為 測試
  5. 如此一來您不需要限定在稍後的程式碼中的這些命名空間中宣告,請在 系統System.Data.OleDbSystem.Data.SqlClient 命名空間上使用 Imports 陳述式。將下列程式碼新增到 Form1 的一般宣告 」 區段:
    Imports System
    Imports System.Data.OleDb
    Imports System.Data.SqlClient
    					
  6. 在 「 Windows Form 設計工具產生的程式碼 」 區域之後,[程式碼] 視窗加入下列程式碼。

    附註您必須變更使用者識別碼 <username>及密碼 = < 強式密碼 > 為正確的值,才能執行這個程式碼。請確定使用者識別碼有適當的權限,才能執行這項作業在資料庫上。
        Private Sub btnTest_Click(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles btnTest.Click
            Dim myConnString As String = _
                "User ID=<username>;password=<strong password>;Initial Catalog=Northwind;Data Source=myServer"
            Dim id As Integer = 25
            Dim desc As String = "myFirstRegion"
            Dim rConn As SqlConnection = New SqlConnection(myConnString)
            rConn.Open()
            Dim command As SqlCommand = New SqlCommand("", rConn)
            command.CommandText = "insert into Region (RegionID, RegionDescription)" & _
                                  "values (@id, @desc)"
    
            'SQL Server 7.0 throws an exception here.
            'Comment the following line to resolve this problem against SQL Server 7.0.
            command.Prepare()
    
            command.Parameters.Add("@id", SqlDbType.Int, 4)
            command.Parameters.Add("@desc", SqlDbType.Char, 50)
            'You can call Prepare after you set up CommandText and parameters.
            command.Prepare() 
    
            command.Parameters(0).Value = id
            command.Parameters(1).Value = desc
            command.ExecuteNonQuery()
            MessageBox.Show("Updated Successfully")
        End Sub
    					
  7. 修改連接字串 (myConnString) 根據您的環境。
  8. 儲存您的專案。在 [偵錯] 功能表上按一下 [開始] 執行您的專案]。
  9. 按一下 [測試]。如果您連線到 SQL Server 7.0 資料庫程式碼會產生上述的例外狀況。

    如果您連線到 SQL Server 2000 資料庫程式碼執行正常,並成功更新日期 」 訊息方塊隨即出現。
  10. 如果要解決這個問題對 SQL Server 7.0 出 command.Prepare 之前程式碼加入該參數並再次執行該專案對呼叫的註解。

?考

ADO.NET 物件和語法的詳細資訊,請參閱以 「 下列 Microsoft.NET Framework 軟體開發套件 (SDK) 文件:
存取使用 ADO.NET 的資料
http://msdn2.microsoft.com/en-us/library/e80y5yhx(vs.71).aspx

屬性

文章編號: 310368 - 上次校閱: 2014年2月24日 - 版次: 2.8
這篇文章中的資訊適用於:
  • Microsoft ADO.NET 2.0
  • Microsoft ADO.NET (included with the .NET Framework)
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual Basic 2005
  • Microsoft SQL Server 7.0 Standard Edition
關鍵字:?
kbnosurvey kbarchive kbmt kbtshoot kberrmsg kbnofix kbprb kbsqlclient kbsystemdata KB310368 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:310368
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com