2012-11-04 2 views
0

누군가가 이것을 검토하는 데 도움이 될 수 있습니까?이 방법이 VB.Net 코드를 작성하는 올바른 방법입니다. 다음은 데이터베이스에서 값을 가져 오기 위해 작성된 함수입니다.코드 검토 - ExecuteScalar를 사용하여 데이터베이스에서 값을 가져 오는 Vb.Net

Public Function GetIdfromDatabase(ByVal var_Id As IntegerAs String 

    'Initialize Variables 
    Dim _GetIdfromDatabase As String 
    _GetIdfromDatabase = Nothing 

    Try 
     _SQLCommand = New SqlCommand("Process", _Conn) 
     _SQLCommand.CommandText = "Select Name from Process where ID= @Id" 
     _SQLCommand.Parameters.Add(New SqlParameter("@ID", SqlDbType.Integer)) 
     _SQLCommand.Parameters(0).Value = var_Id 
     If (_Conn.State <> ConnectionState.Open) Then _Conn.Open() 
     lvar_GetJobName = _SQLCommand.ExecuteScalar() 

    Catch ex As Exception 
     LogError("Error details and description.", ex) 
    Finally 
     If Not _SQLCommand Is Nothing Then 
      _kSQLCommand.Dispose() 
     End If 
     If Not _Conn Is Nothing Then 
      _.Close() 
     End If 
    End Try 

    If _GetIdfromDatabase = Nothing Then 
    'Log Error here 
End If 

    Return _GetIdfromDatabase 
End Function 

답변

0

https://softwareengineering.stackexchange.com/ 아마이를 게시 할 수있는 더 좋은 곳이지만, 여기 어쨌든 간다. 중요성의 순서대로.

사실 실제로 잘못된 것은 당신이 (거의 확실하게) 그것을 로깅 한 후에 예외를 제 거해야한다는 것입니다. 당신도 훌륭한 이유가 없다면. Google ".net 예외 사례 모범 사례".

코드 재사용 및 표준화를 위해 연결을 처리하는 ExecuteScalar 함수가 있어야합니다.

확실히 USING을 사용하면 finally 문보다 더 나은 방법입니다. 아래는 극한으로 가지 않으면 서 어떻게 할 수 있느냐입니다.

_GetIdfromDatabase의 이름이 잘못 지정되었으므로 앞에 오는 밑줄은 일반적으로 클래스 수준 변수를 나타냅니다.

Public Function GetIdfromDatabase(ByVal var_Id As Integer) As String 

    Dim SQLCommand = New SqlCommand() 
    SQLCommand.CommandText = "Select Name from Process where ID= @Id" 
    SQLCommand.Parameters.AddWithValue("@ID", var_Id) 

    Dim sId = ExecuteScalarString(SQLCommand) 

    If String.IsNullOrEmpty(sId) Then 
     'Log Error here 
     'throw exception? 
    End If 

    Return sId 

End Function  
    Public Function ExecuteScalarString(cmd As SqlCommand) As String 

    Return ExecuteScalar(cmd).ToString 
End Function 

Public Function ExecuteScalarInt(cmd As SqlCommand) As Integer 
    Dim returnInt As Integer 
    If Integer.TryParse((ExecuteScalar(cmd).ToString), returnInt) Then 
     Return returnInt 
    End If 

    ' if we get to here it was not an integer 
    'Log Error here 
    Throw New Exception("oopsy") 
End Function 

Public Function ExecuteScalar(cmd As SqlCommand) As Object 

    Dim returnObject As Object 
    Using con As New SqlConnection(_conString) 
     Using cmd 
      Try 

       con.Open() 
       returnObject = cmd.ExecuteScalar() 

      Catch ex As Exception 
       LogError("Error details and description.", ex) 
       Throw 
      End Try 

     End Using 
    End Using 

    Return returnObject 

End Function 
+0

이 함수는 공용 함수 ExecuteScalarString (cmd를 SqlCommand로) 문자열로 - 문자열 또는 정수 또는 심지어 부울을 반환 할 수 있습니다 - 그럼 세 가지 함수를 작성해야합니까 –

+0

당신은 객체를 반환 할 수 있고 호출 함수에서 변환하거나 3 개의 래퍼 (문자열, int, 부울) 위와 같은 private 메소드를 호출하지만 객체를 반환하고 단순히 래퍼에서 변환을 수행합니다. – PatFromCanada

+0

메신저로 .net 새로운, 내가 위의 지시 사항에 따라 구현하는 데 어려움을 겪고있어 위에서 설명한 [코드 래퍼 메서드] 코드를 제공하는 데 도움이 될 것이라고 –

관련 문제