Solved

Dataprovider exception in dotnetnuke

Posted on 2011-02-11
17
1,041 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
 

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
What Security Threats Are You Missing?

Enhance your security with threat intelligence from the web. Get trending threat insights on hackers, exploits, and suspicious IP addresses delivered to your inbox with our free Cyber Daily.

 
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

How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

Join & Write a Comment

In this Article, I will provide a few tips in problem and solution manner. Opening an ASPX page in Visual studio 2003 is very slow. To make it fast, please do follow below steps:   Open the Solution/Project. Right click the ASPX file to b…
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.
Access reports are powerful and flexible. Learn how to create a query and then a grouped report using the wizard. Modify the report design after the wizard is done to make it look better. There will be another video to explain how to put the final p…
Here's a very brief overview of the methods PRTG Network Monitor (https://www.paessler.com/prtg) offers for monitoring bandwidth, to help you decide which methods you´d like to investigate in more detail.  The methods are covered in more detail in o…

760 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

Need Help in Real-Time?

Connect with top rated Experts

22 Experts available now in Live!

Get 1:1 Help Now