Solved

Dataprovider exception in dotnetnuke

Posted on 2011-02-11
17
1,048 Views
Last Modified: 2012-05-11
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
0
Comment
Question by:jcook32
  • 9
  • 6
17 Comments
 
LVL 6

Expert Comment

by:ErikVB
ID: 34883180
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
 

Author Comment

by:jcook32
ID: 34884599
funny thing is there is not sqldataprovider dll in the bin directory.
when is that created?
0
 
LVL 6

Expert Comment

by:ErikVB
ID: 34885981
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
Announcing the Most Valuable Experts of 2016

MVEs are more concerned with the satisfaction of those they help than with the considerable points they can earn. They are the types of people you feel privileged to call colleagues. Join us in honoring this amazing group of Experts.

 

Author Comment

by:jcook32
ID: 34887613
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
 
LVL 6

Expert Comment

by:ErikVB
ID: 34887628
yes that is quite allright

did you try the modified instantiation code (by leaving the dll name empty)
0
 

Author Comment

by:jcook32
ID: 34887637
no. not sure what that is.
can you explain?

thanks
0
 
LVL 6

Expert Comment

by:ErikVB
ID: 34887658
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
 

Author Comment

by:jcook32
ID: 34887683
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
 
LVL 6

Expert Comment

by:ErikVB
ID: 34887714
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
 

Author Comment

by:jcook32
ID: 34887855
is root namespace the same as default? if mine is blank
assembly name is PAAC.Modules.Stations

0
 

Author Comment

by:jcook32
ID: 34888754
Is there a way to make the call differently. rather than use the reflection method.

thanks
0
 

Author Comment

by:jcook32
ID: 34890015
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
 

Author Comment

by:jcook32
ID: 34908337
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
 
LVL 6

Expert Comment

by:ErikVB
ID: 34913981
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
 

Accepted Solution

by:
jcook32 earned 0 total points
ID: 34916386
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
 
LVL 19

Expert Comment

by:Amandeep Singh Bhullar
ID: 35906819
This question has been classified as abandoned and is closed as part of the Cleanup Program. See the recommendation for more details.
0

Featured Post

Free Tool: ZipGrep

ZipGrep is a utility that can list and search zip (.war, .ear, .jar, etc) archives for text patterns, without the need to extract the archive's contents.

One of a set of tools we're offering as a way to say thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

User art_snob (http://www.experts-exchange.com/M_6114203.html) encountered strange behavior of Android Web browser on his Mobile Web site. It took a while to find the true cause. It happens so, that the Android Web browser (at least up to OS ver. 2.…
International Data Corporation (IDC) prognosticates that before the current the year gets over disbursing on IT framework products to be sent in cloud environs will be $37.1B.

789 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question