PRB: SQL Server 7.0에서 Visual Basic .NET을 사용하여 매개 변수를 추가하기 전에 Command.Prepare를 호출하면 오류가 발생한다

기술 자료 번역 기술 자료 번역
기술 자료: 310368 - 이 문서가 적용되는 제품 보기.
이 문서는 이전에 다음 ID로 출판되었음: KR310368
이 문서가 보관되었습니다. "그대로" 제공되었으며, 업데이트가 되지 않을 것입니다.
이 문서의 Microsoft Visual C# .NET 버전에 대한 내용은 311348을 참조하십시오.
모두 확대 | 모두 축소

이 페이지에서

현상

Microsoft SQL Server 7.0에 대해 매개 변수화된 명령을 만들 때 명령에 매개 변수를 추가하기 전에 Prepare 메서드를 호출하면 다음과 같은 오류 메시지가 나타납니다.
처리되지 않은 'System.Data.SqlClient.SqlException' 형식의 예외가 system.data.dll에서 발생했습니다.
추가 정보: 시스템 오류.
SQL Server 2000에서는 이러한 문제가 발생하지 않습니다.

원인

SQL Server 7.0에서는 매개 변수를 추가하기 전에 Prepare 메서드를 실행할 수 없기 때문에 이러한 문제가 발생합니다. 대부분의 데이터베이스 시스템도 이와 마찬가지입니다.

SQL Server 2000에서는 첫 번째 명령을 실행할 때까지 Prepare를 실행하지 않으므로 앞에서 설명한 예외가 생성되지 않습니다. 이러한 최적화로 이후에 명령이 더 이상 실행되지 않으면 Prepare가 오버로드되지 않습니다.

해결 방법

이 문제를 해결하려면 매개 변수를 추가할 때까지 Prepare 메서드를 호출하지 마십시오.

추가 정보

문제를 재현하는 방법

다음 예제 코드에서는 Northwind 예제 코드의 Region 테이블을 사용합니다.
  1. Microsoft Visual Studio .NET을 엽니다.
  2. 새로운 Visual Basic Windows 응용 프로그램 프로젝트를 만듭니다. 기본적으로 Form1이 프로젝트에 추가됩니다.
  3. System.Data 네임스페이스에 대한 참조가 프로젝트에 포함되어 있는지 확인하고 포함되어 있지 않으면 이 네임스페이스에 대한 참조를 추가합니다.
  4. Form1에 Button을 끌어다 놓습니다. Button의 Name 속성을 btnTest로 변경하고 Text 속성을 Test로 변경합니다.
  5. System, System.DataSystem.Data.SqlClient 네임스페이스에 Imports 문을 사용합니다. 나중에 코드에서 이 네임스페이스의 선언을 한정하지 않아도 됩니다. 아래 코드를 Form1의 일반 선언(General Declarations) 구역에 추가합니다.
    Imports System
    Imports System.Data.OleDb
    Imports System.Data.SqlClient
  6. 코드 창에서 "Windows Form 디자이너에서 생성한 코드" 영역 뒤에 다음 코드를 추가합니다.
        Private Sub btnTest_Click(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles btnTest.Click
            Dim myConnString As String = _
                "User ID=sa;password=sa;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(소프트웨어 개발 키트) 설명서를 참조하십시오.
Accessing Data with ADO.NET
http://msdn2.microsoft.com/en-us/library/e80y5yhx(vs.71).aspx

속성

기술 자료: 310368 - 마지막 검토: 2014년 2월 24일 월요일 - 수정: 1.2
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft ADO .NET(.NET Framework에 포함)
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft SQL Server 7.0 Standard Edition
키워드:?
kbnosurvey kbarchive kbnofix kbprb kbgrpdsvbdb kbgrpdsmdac KB310368

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