You might want to check out Miguel Castro from Steelblue (See link on Website) CSLAex library. He uses a single DataAccess layer similar to what you are discussing and his codegenerator default templates target towards this.
I adopted his code and for example have a fetch something like this:
Private
Overloads Sub DataPortal_Fetch(ByVal criteria As Criteria)
Using reader As SafeDataReader = _
New DAC.CentralDataAccess(True).ReaderFromProcedureById(Of Integer)("ProcName", criteria.ID)
If reader.Read() Then
Try
PopData(reader)
Catch ex As Exception
Throw
End Try
End If
End Using
End Sub