Ссылка на элемент без общего доступа требует ссылки на объект - PullRequest
0 голосов
/ 03 мая 2011

Я получаю вышеуказанную ошибку сейчас, когда запускаю одну из моих страниц ASPX, написанных на VB.NET. Поэтому я попытался найти решение по адресу: http://msdn.microsoft.com/en-us/library/zwwhc0d0(v=vs.80).aspx

Приведенная выше ссылка казалась многообещающей, потому что она точно описывала мою проблему. Однако из этого решения я получил следующую ошибку:

Сообщение об ошибке компилятора: BC30456: «GlobalF2» не является членом Строка «GlobalFunctions» 88:
DSProductData = GlobalFunctions.GlobalF2.ComplaintTrendingDrillDown3p (FirstMonthDate, LastMonthDate, TheLevel, ProductGroup, TheCategory, ListNumber)

А вот мой модифицированный исходный код, вызывающий эту ошибку, но основанный на решении Майка Смита:

Namespace GlobalFunctions
    Public Class GlobalF
        Public Function ComplaintTrendingDrillDown3p(ByVal FirstMonth As DateTime, ByVal LastMonth As DateTime, ByVal rowLevel As Integer, ByVal productGroup As String, ByVal category As String, ByVal ListNumber As String) As DataSet
            Dim DSPageData As New System.Data.DataSet
            Dim param(5) As SqlClient.SqlParameter

            param(0) = New SqlParameter("@FirstMonthDate", SqlDbType.DateTime)
            param(0).Value = FirstMonth
            param(1) = New SqlParameter("@LastMonthDate", SqlDbType.DateTime)
            param(1).Value = LastMonth
            param(2) = New SqlParameter("@TheLevel", SqlDbType.Int)
            param(2).Value = rowLevel
            param(3) = New SqlParameter("@ProductGroup", SqlDbType.Varchar)
            param(3).Value = productGroup
            param(4) = New SqlParameter("@TheCategory", SqlDbType.Varchar)
            param(4).Value = category
            param(5) = New SqlParameter("@ListNumber", SqlDbType.Varchar)
            param(5).Value = ListNumber

            ''# A Using block will ensure the .Dispose() method is called for these variables, even if an exception is thrown 
            ''# This is IMPORTANT - not disposing your connections properly can result in an unrespsonsive database 
            Using conn As New SQLConnection(ConfigurationSettings.AppSettings("AMDMetricsDevConnectionString")), _
           cmd As New SQLCommand("ComplaintTrendingDrillDown3p", conn), _
            da As New SQLDataAdapter(cmd)
                cmd.CommandType = CommandType.StoredProcedure
                cmd.Parameters.AddRange(param)

                da.Fill(DSPageData)
            End Using

            Return DSPageData
        End Function
    End Class

    Public Class CallingClass
        Dim GlobalF2 As New GlobalF
        Public Function ComplaintTrendingDrillDown3p(ByVal FirstMonth As DateTime, ByVal LastMonth As DateTime, ByVal rowLevel As Integer, ByVal productGroup As String, ByVal category As String, ByVal ListNumber As String) As DataSet
            Dim DSPageData As New System.Data.DataSet
            Dim param(5) As SqlClient.SqlParameter

            param(0) = New SqlParameter("@FirstMonthDate", SqlDbType.DateTime)
            param(0).Value = FirstMonth
            param(1) = New SqlParameter("@LastMonthDate", SqlDbType.DateTime)
            param(1).Value = LastMonth
            param(2) = New SqlParameter("@TheLevel", SqlDbType.Int)
            param(2).Value = rowLevel
            param(3) = New SqlParameter("@ProductGroup", SqlDbType.Varchar)
            param(3).Value = productGroup
            param(4) = New SqlParameter("@TheCategory", SqlDbType.Varchar)
            param(4).Value = category
            param(5) = New SqlParameter("@ListNumber", SqlDbType.Varchar)
            param(5).Value = ListNumber

            ''# A Using block will ensure the .Dispose() method is called for these variables, even if an exception is thrown 
            ''# This is IMPORTANT - not disposing your connections properly can result in an unrespsonsive database 
            Using conn As New SQLConnection(ConfigurationSettings.AppSettings("AMDMetricsDevConnectionString")), _
           cmd As New SQLCommand("ComplaintTrendingDrillDown3p", conn), _
            da As New SQLDataAdapter(cmd)
                cmd.CommandType = CommandType.StoredProcedure
                cmd.Parameters.AddRange(param)

                da.Fill(DSPageData)
            End Using

            Return DSPageData
        End Function
    End Class

End Namespace

Я думаю, что Майк Смит прав насчет того, чтобы не использовать Shared, потому что я думаю, что это вызвало эту проблему. Тем не менее, я новичок в VB.NET, и я не уверен, как еще объявить экземпляр как переменную объекта, а затем ссылаться на этот экземпляр по имени переменной. Вы можете помочь?

Хорошо, ваше решение выглядело очень хорошо для меня. Я хочу убедиться, что я реализовал это правильно, хотя. Можете ли вы сравнить мой с Урсом?

Теперь я получаю ту же ошибку, которая была у меня изначально ... Может быть, это перезаписывает данные в таблице?

            Dim gf As New GlobalFunctions.CallingClass
            DSProductData = gf.GlobalF2.ComplaintTrendingDrillDown3p(FirstMonthDate, LastMonthDate, TheLevel, ProductGroup, TheCategory, ListNumber)
...
    Public Class CallingClass
        Public GlobalF2 As New GlobalF
        'Public Function CallingClass(ByVal FirstMonth As DateTime, ByVal LastMonth As DateTime, ByVal rowLevel As Integer, ByVal productGroup As String, ByVal category As String, ByVal ListNumber As String)
        '    Dim cc_new As New CallingClass()
        'End Function

        Public Function ComplaintTrendingDrillDown3p(ByVal FirstMonth As DateTime, ByVal LastMonth As DateTime, ByVal rowLevel As Integer, ByVal productGroup As String, ByVal category As String, ByVal ListNumber As String) As DataSet
            Dim DSPageData As New System.Data.DataSet
            Dim param(5) As SqlClient.SqlParameter

            param(0) = New SqlParameter("@FirstMonthDate", SqlDbType.DateTime)
            param(0).Value = FirstMonth
            param(1) = New SqlParameter("@LastMonthDate", SqlDbType.DateTime)
            param(1).Value = LastMonth
            param(2) = New SqlParameter("@TheLevel", SqlDbType.Int)
            param(2).Value = rowLevel
            param(3) = New SqlParameter("@ProductGroup", SqlDbType.Varchar)
            param(3).Value = productGroup
            param(4) = New SqlParameter("@TheCategory", SqlDbType.Varchar)
            param(4).Value = category
            param(5) = New SqlParameter("@ListNumber", SqlDbType.Varchar)
            param(5).Value = ListNumber

            ''# A Using block will ensure the .Dispose() method is called for these variables, even if an exception is thrown 
            ''# This is IMPORTANT - not disposing your connections properly can result in an unrespsonsive database 
            Using conn As New SQLConnection(ConfigurationSettings.AppSettings("AMDMetricsDevConnectionString")), _
           cmd As New SQLCommand("ComplaintTrendingDrillDown3p", conn), _
            da As New SQLDataAdapter(cmd)
                cmd.CommandType = CommandType.StoredProcedure
                cmd.Parameters.AddRange(param)

                da.Fill(DSPageData)
            End Using

            Return DSPageData
        End Function
    End Class

и ошибка:

System.ArgumentException: столбец QXP_SHORT_DESC не принадлежит Стол Стол.

Оскорбительная строка:

Если pException ("QXP_SHORT_DESC") = TheCategory Тогда

1 Ответ

1 голос
/ 03 мая 2011

Вы не можете затемнить экземпляр класса вне метода, который можете использовать

public GlobalF2 As New GlobalF

EDIT


Я точно не знаю, что вы пытаетесь сделать, но вытаскиваете весь посторонний код.

Файл класса

Namespace GlobalFunctions

    Public Class GlobalF
        Public Sub DoSomthing()
            Console.WriteLine("hi")
        End Sub

    End Class

    Public Class CallingClass
        Public GlobalF2 As New GlobalF
        Public x As Int16 = 3
    End Class
End Namespace

Основной файл

Imports System.IO
Module Module1


    Public Sub Main()
        Dim gf As New GlobalFunctions.CallingClass
        gf.GlobalF2.DoSomthing()
    End Sub

End Module
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...