4

안녕하세요 모든 매개 변수가 보내지지 않은 저장 프로 시저에서 데이터를 가져 오는 예제를 찾으려고하거나 반환 된 출력 매개 변수가 없습니다. 그것은 데이터를 표시하지만.ms SQL 저장 프로 시저가 출력없이 데이터를 반환합니다.

아래 코드를 사용하면 어떻게 얻을 수 있습니까?

Dim myCommandSQL As New SqlCommand 
    Dim myReaderSQL As SqlDataReader = Nothing 
    Dim intX As Integer = 0 
    Dim connSql As SqlConnection 

    Try 
     connSql = New SqlConnection("Server=sqlprod;" & _ 
            "Database=ISS3_PROD;" & _ 
            "User ID=xxx;" & _ 
            "Password=xxx;" & _ 
            "Trusted_Connection=False;") 
     connSql.Open() 

     myCommandSQL.CommandType = CommandType.StoredProcedure 
     myCommandSQL.CommandText = "Select_Prod" 

     Dim sqlParReturn1 As System.Data.SqlClient.SqlParameter = myCommandSQL.Parameters.Add("@return_value", SqlDbType.VarChar) 

     sqlParReturn1.Direction = ParameterDirection.Output 
     myCommandSQL.ExecuteNonQuery() 

     MsgBox(sqlParReturn1) 

     connSql.Close() 
     myCommandSQL.Dispose() 

@return_value 나는 무슨 일이 일어날 지 알기 위해 거기에 넣었지만 아무 것도 반환하지 않았습니다.

도움이 될 것입니다.

데이빗

답변

3

매개 변수를 명령에 할당하면 저장 프로 시저에 매개 변수가 필요합니다. 또한 방향을 Output으로 지정하면 저장 프로 시저에서 해당 매개 변수를 OUTPUT으로 표시해야합니다.

매개 변수를 사용하지 않는 저장 프로 시저의 결과를 얻으려면 sqlParReturn1이 포함 된 모든 줄을 제거하십시오. 또한 명령이 "비 쿼리"가 아닙니다. 은 데이터를 쿼리하는입니다. 하여 ADO DataReader를 사용하여 데이터를 읽고에 MSDN documentation을 여기

Using connSql As SqlConnection = New SqlConnection(...) 
    connSql.Open() 
    Using myCommandSQL As SqlCommand = connSql.CreateCommand() 
     myCommandSQL.CommandType = CommandType.StoredProcedure 
     myCommandSQL.CommandText = "Select_Prod" 
     Using reader As SqlDataReader = myCommandSQL.ExecuteReader() 
      If reader.HasRows Then 
       While reader.Read() 
        // loops through the rows returned 
       End While 
      End If 
     End Using 
    End Using 
End Using 
+0

감사! 지금은 잘 작동합니다. – StealthRT

2

이다 : 그것을 얻으려면, 당신은이 작업을 수행해야한다 (나는 또한 더 좋은 사례 기술을 사용하여 코드를 리팩토링). 나는 그들의 예제가 이것을 아주 잘 설명한다고 생각한다. 그래서 여기에 예제를 복사하여 붙여 넣었다. SQL 설정을 바꾼 다음 ExecuteReader을 호출 한 다음 reader.Read이 실행되는 동안 실행되는 while 루프를 호출하면됩니다. 루프 내부에서 서문이나 열 이름을 사용하여 reader.Get...을 통해 열에 액세스 할 수 있습니다.

Private Sub HasRows(ByVal connection As SqlConnection) 
    Using connection 
     Dim command As SqlCommand = New SqlCommand(_ 
      "SELECT CategoryID, CategoryName FROM Categories;", _ 
      connection) 
     connection.Open() 

     Dim reader As SqlDataReader = command.ExecuteReader() 

     If reader.HasRows Then 
      Do While reader.Read() 
       Console.WriteLine(reader.GetInt32(0) _ 
        & vbTab & reader.GetString(1)) 
      Loop 
     Else 
      Console.WriteLine("No rows found.") 
     End If 

     reader.Close() 
    End Using 
End Sub 
관련 문제