1

ここで簡単な答えを期待しています。

OK、DBから単一値のルックアップをたくさん行うので、ルックアップを処理する関数を作成しました。あらゆるタイプのデータ型(文字列、整数、日付など)を取得するように設計されています。

数値を取得したい場合は機能しますが、文字列が必要な場合はエラーが発生します(InvalidCastExceptionが行の文字列を整数に変換しようとしています:GetValue = DR(0))。データ型が不明で変化するため、ctypeまたはdirectcastを実行できません。他のデータ型はまだテストしていません。

コードは以下のとおりです。この関数を機能させる方法を知りたい、または同じ目的を果たす別の関数を指摘したい。

Public Shared Function GetValue(Optional ByVal SQL As String = "", Optional ByVal FieldName As String = "", Optional ByVal TableName As String = "", Optional ByVal WhereClause As String = "") As VariantType?
    Dim myConnection As SqlConnection
    Dim myCommand As SqlCommand
    Dim strSQL As New SQLStringBuilder
    Dim DR As SqlDataReader

    myConnection = New SqlConnection(ConfigurationManager.ConnectionStrings("ConnAFRAMSSQL").ConnectionString)
    strSQL.Add(SQL)
    If FieldName > "" Then
        strSQL.Add("SELECT " & FieldName)
    End If
    If TableName > "" Then
        strSQL.Add("FROM " & TableName)
    End If
    If WhereClause > "" Then
        strSQL.Add("WHERE " & WhereClause)
    End If
    myConnection.Open()
    myCommand = New SqlCommand(strSQL.ToString, myConnection)
    DR = myCommand.ExecuteReader()
    If DR.HasRows Then
        DR.Read()
        GetValue = DR(0)
    Else
        GetValue = Nothing
    End If
End Function

ありがとう。

4

1 に答える 1

2

System.Objectメソッドの(System.Objectはすべてのタイプの最終的な基本クラスです)戻りタイプを指定できます。

Public Shared Function GetValue(Optional ByVal SQL As String = "", Optional ByVal FieldName As String = "", Optional ByVal TableName As String = "", Optional ByVal WhereClause As String = "") As Object
    Dim myConnection As SqlConnection
    ....
   Dim obj as Object=Nothing
   If DR.Read()
        obj=DR(0)
   End If
   DR.Close()
   myConnection.Close()
   return obj
End Function
于 2012-06-16T03:35:54.033 に答える