Link to home
Start Free TrialLog in
Avatar of jcook32
jcook32Flag for United States of America

asked on

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
Avatar of ErikVB
ErikVB

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?
Avatar of jcook32

ASKER

funny thing is there is not sqldataprovider dll in the bin directory.
when is that created?
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)
Avatar of jcook32

ASKER

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?
yes that is quite allright

did you try the modified instantiation code (by leaving the dll name empty)
Avatar of jcook32

ASKER

no. not sure what that is.
can you explain?

thanks
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)
Avatar of jcook32

ASKER

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?
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
Avatar of jcook32

ASKER

is root namespace the same as default? if mine is blank
assembly name is PAAC.Modules.Stations

Avatar of jcook32

ASKER

Is there a way to make the call differently. rather than use the reflection method.

thanks
Avatar of jcook32

ASKER

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 ---
Avatar of jcook32

ASKER

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
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?
ASKER CERTIFIED SOLUTION
Avatar of jcook32
jcook32
Flag of United States of America image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of Amandeep Singh Bhullar
This question has been classified as abandoned and is closed as part of the Cleanup Program. See the recommendation for more details.