2012-01-04 2 views
0

안녕하세요.이 모든 것은 vb.net을 통해 저장 프로 시저를 호출하는 첫 번째이며, 실행하기 전에 모든 것이 올바른지 확인하고 싶습니다.저장 프로 시저 호출 및 결과 가져 오기

Dim connectionString As String = GetConnectionString() 
Dim intCount As Integer = 0 

Using connection As New SqlConnection(connectionString) 
    Dim command As SqlCommand = connection.CreateCommand() 

    Try 
     connection.Open() 
     command.CommandType = CommandType.StoredProcedure 
     command.CommandText = "Complete_S_H" 
     command.Parameters.Add("@J_ID", SqlDbType.Int) 
     command.Parameters.Add("@O_Nbr", SqlDbType.VarChar) 
     command.Parameters.Add("@R_Nbr", SqlDbType.VarChar) 
     command.Parameters("@theOutput").Direction = ParameterDirection.Output 

     Dim dataReader As SqlDataReader = command.ExecuteReader() 
     Do While dataReader.Read() 
     ListView1.Items.Add(Trim(dataReader(0))) 
     ListView1.Items(CInt(intCount)).SubItems.Add(Trim(dataReader(1))) 
     ListView1.Items(CInt(intCount)).SubItems.Add(Trim(dataReader(2))) 
     ListView1.Items(CInt(intCount)).SubItems.Add(Trim(dataReader(3))) 
     ListView1.Items(CInt(intCount)).SubItems.Add(Trim(dataReader(4))) 
     ListView1.Items(CInt(intCount)).SubItems.Add(Trim(dataReader(5))) 
     intCount = intCount + 1 
     Loop 

     dataReader.Close() 
     connection.Close() 
    Catch ex As Exception 
     Console.WriteLine(ex.Message) 
    End Try 
End Using 

저장 프로 시저가 데이터의 가치가 6 colums를 반환하고 내가리스트 뷰에 데이터를 추가하고 싶습니다 :

이 내 코드입니다. 나는 그것을하기위한 올바른 sytax를 가지고 있는지 모르겠다. 그러나 이것은 나의 이전 sql 코드 (저장 프로 시저가 아닌 질의 실행)에서 사용 된 것이다.

또한 텍스트 상자에서 위의 @xxx 이름에 대한 데이터를 가져 오는 방법을 모르겠습니다. 어떻게 사용자 텍스트 상자에서 @xxx 이름으로 값을 전달합니까?

는 MS SQL mangement 스튜디오 코드는 저장 프로 시저에 대해 이것이다 : 전달 varibles의

EXEC [dbo].[Complete_S_H] 
@J_ID = 208660, 
@O_Nbr = NULL, 
@R_Nbr = NULL 

두 NULL이 될 수 있습니다. 데이터를 반환하려면 하나만 작성해야합니다.

도움이 될 것입니다.

데이빗

답변

3

매우 가깝습니다. 노트의

커플 :

  1. 당신이 알고하지 않는 속도와 코드

  2. 를 정리 추가 된 목록 항목에 로컬 참조를 얻을

    당신이 할 수있는 DB 값 것 절대 null이 아니므로 DbNull을 사용하기 전에 항상 DbNull에 대해 테스트해야합니다.

  3. 텍스트 상자의 값을 사용하려면 Parameters.AddWithValue을 사용할 수 있습니다. 방법을 보여줄 코드를 수정했습니다.

    command.Parameters.Add("@J_ID", SqlDbType.Int).Value = CInt(TextBox1.Text) 
    

    또는 여기

    command.Parameters("@J_ID").Value = CInt(TextBox1.Text) 
    

    이 아이디어를 재 작성 및 설정을위한 보너스 루프 :이 추가되면

대안은 매개 변수의 .Value 속성을 설정하는 것입니다 하위 항목 (필수 사항 아님) :

Dim connectionString As String = GetConnectionString() 

    Using connection As New SqlConnection(connectionString) 
     Dim command As SqlCommand = connection.CreateCommand() 

     Try 
      connection.Open() 
      command.CommandType = CommandType.StoredProcedure 
      command.CommandText = "Complete_S_H" 
      command.Parameters.AddWithValue("@J_ID", CInt(TextBox1.Text)) 
      command.Parameters.AddWithValue("@O_Nbr", TextBox2.Text) 
      command.Parameters.AddWithValue("@R_Nbr", TextBox3.Text) 
      command.Parameters("@theOutput").Direction = ParameterDirection.Output 
      'command.ExecuteNonQuery() 

      Dim dataReader As SqlDataReader = command.ExecuteReader() 
      Do While dataReader.Read() 
       Dim oItem As ListViewItem 

       oItem = ListView1.Items.Add(Trim(dataReader(0))) 

       For nI As Integer = 1 To dataReader.FieldCount - 1 
        If Not dataReader.IsDBNull(nI) Then 
         oItem.SubItems.Add(Trim(dataReader(nI))) 
        Else 
         oItem.SubItems.Add(String.Empty) 
        End If 
       Next 
      Loop 

      dataReader.Close() 
      connection.Close() 
     Catch ex As Exception 
      Console.WriteLine(ex.Message) 
     End Try 
    End Using 
+0

경애 일부 CT! 그것은 당신의 작은 비틀기와 함께 잘 작동했습니다! 감사! :영형) – StealthRT

관련 문제