Want to win a PS4? Go Premium and enter to win our High-Tech Treats giveaway. Enter to Win

x
?
Solved

Dataprovider exception in dotnetnuke

Posted on 2011-02-11
17
Medium Priority
?
1,065 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 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
What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

 

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

Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

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

Today is the age of broadband.  More and more people are going this route determined to experience the web and it’s multitude of services as quickly and painlessly as possible. Coupled with the move to broadband, people are experiencing the web via …
Introduction This article shows how to use the open source plupload control to upload multiple images. The images are resized on the client side before uploading and the upload is done in chunks. Background I had to provide a way for user…
In this video you will find out how to export Office 365 mailboxes using the built in eDiscovery tool. Bear in mind that although this method might be useful in some cases, using PST files as Office 365 backup is troublesome in a long run (more on t…
In this video, Percona Director of Solution Engineering Jon Tobin discusses the function and features of Percona Server for MongoDB. How Percona can help Percona can help you determine if Percona Server for MongoDB is the right solution for …
Suggested Courses

609 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