Access データベースとストアド クエリがあります。これが私のクエリです...
SELECT MAX(CLNG(RIGHT(ProjectNum, 6))) AS LastDigits
FROM project_master_query
WHERE ((ProjectNum LIKE (IIF([@priorityDefID] = 4, "C*", "F*"))));
たとえば、このクエリを実行して @priorityDefID に 2 を渡すと、LastDigits の列名と正しい値 1 を含む 1 つの行が返されます。これを呼び出すVBコードは次のとおりです...
'Project Class (Without adding unnecessary code)
Public Shared Function GenerateProjectNumber(ByVal priorityDefID As Integer) As String
Dim dt As DataTable = ProjectSQL.GetLastGeneratedNumber(priorityDefID)
Dim lastGeneratedNumber As Integer
If dt.Rows.Count > 0 Then
'Exception Occurs Below: DBNull cannot be cast to other types
lastGeneratedNumber = Convert.ToInt32(dt.Rows(0).Item(0)) ' Or .Item("LastDigits"))
End If
End Function
'ProjectSQL Class
Public Shared Function GetLastGeneratedNumber(ByVal priorityDefID As Integer) As DataTable
Dim parameterList As New List(Of DataParameter)
parameterList.Add(New DataParameter("@priorityDefID", priorityDefID, ParameterDirection.Input, OleDbType.Integer))
Return DAL.GetDataTableUsingReader("GetLastGeneratedNumber", parameterList)
End Function
ご覧のとおり、行が返されますが、NULL 値が含まれています。Access でクエリを実行し、VB を介して渡すのとまったく同じ値を渡すと、正しい値が得られます。コードで実行すると、null 値が返されます。私が欠けていることを際立たせるものはここにありますか?