Dataprovider exception in dotnetnuke

I am creating a custom module for dotnetnuke and i cannot figure out why i am getting a dataprovider exception.
the error happens on this line:  objProvider = CType(Framework.Reflection.CreateObject("data", "PAAC.Modules.Stations.Data", "PAAC.Modules.Stations"), DataProvider)

this is the full error in the browser:
Error: StationPAAC is currently unavailable.
DotNetNuke.Services.Exceptions.ModuleLoadException: The type initializer for 'PAAC.Modules.Stations.Data.DataProvider' threw an exception. ---> System.TypeInitializationException: The type initializer for 'PAAC.Modules.Stations.Data.DataProvider' threw an exception. ---> System.ArgumentNullException: Value cannot be null. Parameter name: type at PAAC.Modules.Stations.Data.DataProvider.CreateProvider() in C:\DNN560\Website\DesktopModules\Stations\Components\DataProvider.vb:line 73 at PAAC.Modules.Stations.Data.DataProvider..cctor() in C:\DNN560\Website\DesktopModules\Stations\Components\DataProvider.vb:line 42 --- End of inner exception stack trace --- at PAAC.Modules.Stations.ViewStations.BindGrid(String type) in C:\DNN560\Website\DesktopModules\Stations\ViewStations.ascx.vb:line 155 at PAAC.Modules.Stations.ViewStations.Page_Load(Object sender, EventArgs e) in C:\DNN560\Website\DesktopModules\Stations\ViewStations.ascx.vb:line 73 --- End of inner exception stack trace ---

i have tried everything.
Please help

jcook32
jcook32Asked:
Who is Participating?
 
jcook32Connect With a Mentor Author Commented:
I figured out my solution. I was not overriding the delete function which in turn Visual Studio said the Class declaration had to have mustinherits.
once i removed the mustinherits from the class then added the override to the delete function it worked.
0
 
ErikVBCommented:
couple of questions:

* what namespace is your concrete sqldataprovider in
* what is the name of the dll it is in.
* is the concrete sqldataprovider in the same dll as the rest of the module?
0
 
jcook32Author Commented:
funny thing is there is not sqldataprovider dll in the bin directory.
when is that created?
0
Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

 
ErikVBCommented:
It's ok if it doesn't have it's own DLL, it will only have that if the SQLDataProvider is located in its own project.

assuming that "PAAC.Modules.Stations.Data" is the namespace your SQLDataProvider class lives in, the provider instantiation should look like this:

objProvider = CType(Framework.Reflection.CreateObject("data", "PAAC.Modules.Stations.Data", ""), DataProvider)
0
 
jcook32Author Commented:
yes it is. i have a dataprovider.vb file with the same namesspace --"PAAC.Modules.Stations.Data"
so both the sqldataprovider.vb and dataprovider have the same name space.
is this okay?
0
 
ErikVBCommented:
yes that is quite allright

did you try the modified instantiation code (by leaving the dll name empty)
0
 
jcook32Author Commented:
no. not sure what that is.
can you explain?

thanks
0
 
ErikVBCommented:
use this

objProvider = CType(Framework.Reflection.CreateObject("data", "PAAC.Modules.Stations.Data", ""), DataProvider)

instead of

objProvider = CType(Framework.Reflection.CreateObject("data", "PAAC.Modules.Stations.Data", "PAAC.Modules.Stations"), DataProvider)

to explain: this code instantiates the DataProvider that is set as default dataprovider in web.config (By default this is a SQLDataProvider in DNN)
0
 
jcook32Author Commented:
i get the same thing.

do i need to re-install the module definition within my local dnn install after each build? or is it enough to refresh the browser?
0
 
ErikVBCommented:
this is not a DNN error, the error means that your dataprovider is not where you say it is.

this can be caused by an incorrect namespace. This can happen if you added a default namespace to the project (in project properties), and also used the full namespace in your code file. A quick way to see what namespace your class is actually in is by using the visual studio object browser. Please verify that your dataprovider and sqldataprovider are actually in the namespace you think they are

Also, make sure that when you do a module build, the DLL is actually copied to the website bin folder
0
 
jcook32Author Commented:
is root namespace the same as default? if mine is blank
assembly name is PAAC.Modules.Stations

0
 
jcook32Author Commented:
Is there a way to make the call differently. rather than use the reflection method.

thanks
0
 
jcook32Author Commented:
a more detailed error

DotNetNuke.Services.Exceptions.ModuleLoadException: Could not load type 'PAAC.Modules.Stations.ViewStations'. ---> System.Web.HttpParseException: Could not load type 'PAAC.Modules.Stations.ViewStations'. ---> System.Web.HttpParseException: Could not load type 'PAAC.Modules.Stations.ViewStations'. ---> System.Web.HttpException: Could not load type 'PAAC.Modules.Stations.ViewStations'. at System.Web.UI.TemplateParser.GetType(String typeName, Boolean ignoreCase, Boolean throwOnError) at System.Web.UI.TemplateParser.ProcessInheritsAttribute(String baseTypeName, String codeFileBaseTypeName, String src, Assembly assembly) at System.Web.UI.TemplateParser.PostProcessMainDirectiveAttributes(IDictionary parseData) --- End of inner exception stack trace --- at System.Web.UI.TemplateParser.ProcessException(Exception ex) at System.Web.UI.TemplateParser.ParseStringInternal(String text, Encoding fileEncoding) at System.Web.UI.TemplateParser.ParseString(String text, VirtualPath virtualPath, Encoding fileEncoding) --- End of inner exception stack trace --- at System.Web.UI.TemplateParser.ParseString(String text, VirtualPath virtualPath, Encoding fileEncoding) at System.Web.UI.TemplateParser.ParseFile(String physicalPath, VirtualPath virtualPath) at System.Web.UI.TemplateParser.ParseInternal() at System.Web.UI.TemplateParser.Parse() at System.Web.Compilation.BaseTemplateBuildProvider.get_CodeCompilerType() at System.Web.Compilation.BuildProvider.GetCompilerTypeFromBuildProvider(BuildProvider buildProvider) at System.Web.Compilation.BuildProvidersCompiler.ProcessBuildProviders() at System.Web.Compilation.BuildProvidersCompiler.PerformBuild() at System.Web.Compilation.BuildManager.CompileWebFile(VirtualPath virtualPath) at System.Web.Compilation.BuildManager.GetVPathBuildResultInternal(VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile) at System.Web.Compilation.BuildManager.GetVPathBuildResultWithNoAssert(HttpContext context, VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile) at System.Web.UI.TemplateControl.LoadControl(VirtualPath virtualPath) at DotNetNuke.UI.ControlUtilities.LoadControl[T](TemplateControl containerControl, String ControlSrc) at DotNetNuke.UI.Modules.ModuleHost.LoadModuleControl() --- End of inner exception stack trace ---
0
 
jcook32Author Commented:
this is my entire dataprovider.vb file
i am loosing my mind here trying to figure this one out

Imports System
Imports DotNetNuke

Namespace PAAC.Stations

    ''' -----------------------------------------------------------------------------
    ''' <summary>
    ''' An abstract class for the data access layer
    ''' </summary>
    ''' <remarks>
    ''' </remarks>
    ''' <history>
    ''' </history>
    ''' -----------------------------------------------------------------------------
    Public MustInherit Class DataProvider


#Region "Shared/Static Methods"

        ' singleton reference to the instantiated object
        Private Shared objProvider As DataProvider = Nothing

        ' constructor
        Shared Sub New()



            CreateProvider()
            Dim response As HttpResponse
            response = System.Web.HttpContext.Current.Response
            response.Write(objProvider)
            response.Write("in sub new<br>")
            ' response.End()

        End Sub

        ' dynamically create provider
        Public Shared Sub CreateProvider()
            Try
                'Dim response As HttpResponse
                'response = System.Web.HttpContext.Current.Response
                'response.Write("(")
                'response.Write(objProvider)
                'response.Write(")<br>")
                'response.Write("before  Reflection<br>")
                ' response.End()

                'objProvider = DotNetNuke.Framework.Reflection.CreateObject("data")
                objProvider = CType(Framework.Reflection.CreateObject("data", "PAAC.Stations.Data", ""), DataProvider)

                'response.Write(objProvider)
                'response.Write("objprovider<br>")
                'response.Write("after  Reflection<br>")
                ' response.End()


            Catch ex As Exception
                Throw ex
            End Try
        End Sub

        ' return the provider
        Public Shared Shadows Function Instance() As DataProvider
            '  CreateProvider()

            Return objProvider

        End Function

#End Region

#Region "Abstract methods"


        Public MustOverride Function GetPAACStationsByType(ByVal type As String) As IDataReader
        Public MustOverride Function GetPAACStationsByModule(ByVal ModuleId As Integer) As IDataReader
        Public MustOverride Function GetPAACStationInfo(ByVal ID As Integer) As IDataReader
        Public MustOverride Function AddPAACStations(ByVal ID As Integer, ByVal ModuleID As Integer, ByVal StationName As String, ByVal type As String, ByVal location As String, ByVal directservice As String, ByVal connectingservice As String, ByVal parkandridelot As String, ByVal Amenities As String, ByVal lineorder As Integer) As Integer
        Public MustOverride Sub UpdatePAACStations(ByVal ID As Integer, ByVal ModuleID As Integer, ByVal StationName As String, ByVal type As String, ByVal location As String, ByVal directservice As String, ByVal connectingservice As String, ByVal parkandridelot As String, ByVal Amenities As String, ByVal lineorder As Integer)
        Public MustOverride Sub DeletePAACStations(ByVal ID As Integer)

#End Region

        'Function GetStationsType(ByVal type As String) As IDataReader
        '    Throw New NotImplementedException
        'End Function

        'Function GetStationsByModuleID(ByVal ModuleId As Integer) As IDataReader
        '    Throw New NotImplementedException
        'End Function

        'Function GetStationsInfo(ByVal ID As Integer) As IDataReader
        '    Throw New NotImplementedException
        'End Function

        'Sub AddStations(ByVal p1 As Integer, ByVal p2 As Integer, ByVal p3 As String, ByVal p4 As String, ByVal p5 As String, ByVal p6 As String, ByVal p7 As String, ByVal p8 As String, ByVal p9 As String, ByVal p10 As Integer)
        '    Throw New NotImplementedException
        'End Sub

        'Sub UpdateStations(ByVal p1 As Integer, ByVal p2 As Integer, ByVal p3 As String, ByVal p4 As String, ByVal p5 As String, ByVal p6 As String, ByVal p7 As String, ByVal p8 As String, ByVal p9 As String, ByVal p10 As Integer)
        '    Throw New NotImplementedException
        'End Sub

        'Sub DeleteStations(ByVal ID As Integer)
        '    Throw New NotImplementedException
        'End Sub

    End Class

End Namespace
0
 
ErikVBCommented:
You are creating your own mess here :)

couple of pointers:
* it would be good practice to use the same base namespace as the name of your assembly. So, you named your assembly PAAC.Modules.Stations, which means that the namespace you should use is also "PAAC.Modules.Stations"
*  currently, your dataprovider sits in the namespace PAAC.Stations, which means that the instantiation should look like this: objProvider = CType(Framework.Reflection.CreateObject("data", "PAAC.Stations", ""), DataProvider)
* make sure that both the abstract DataProvider class and the SQLDataProvider class are in the same namespace

And no: you cannot instantiate a provider without reflection... what would be the point in that?
0
 
Amandeep Singh BhullarCommented:
This question has been classified as abandoned and is closed as part of the Cleanup Program. See the recommendation for more details.
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.