-2

「System.ArgumentException:値をnull、文字列、または空にすることはできません」というエラーが発生します。
ラインコードで

Public Sub New(ByVal databaseName As String)
            **db = New Database(databaseName)**
End Sub

ソースファイルの原因となるエラーが「C:\ Company \ Main \ Source \ DataLayer\Object2.vb」です。スクリーンショットを見つけてください。

手伝ってもらえますか?

タスク説明
下記のルートファイルの以下の関数から「db_StoredProcedue」を実行しようとしています。C:\ Company \ Main \ Source \ Project \ App_Code \ Application \ ResultDataset.vb

    Imports System.Web.UI
    Imports System.Data
    Imports System.IO
    Imports Company.Web.TMSuite.Workflow
    Namespace Company.Web.TMSuite
    Public Class ResultDataset
        Inherits BasePage
        Public Shared Function GetResultsDataset() As DataSet
            Dim Obj1 As New Workflow(BasePage.DatabaseName)

            Dim ds As New DataSet

            ds = Obj1.GetResultDataset()

            Return ds

        End Function

    End Class

End Namespace  

C:\ Company \ Main \ Source \ Workflow\Object1.vbにあるObj1ファイル

Imports System.Globalization
Imports Company.Web.TMSuite.DataAccess
Imports Company.Web.TMSuite.TMSuiteComponents
Public Class Workflow
    Private objResultsData As ResultsData  

Public Sub New(ByVal databaseName As String)
    objMetricsData = New MetricsData(databaseName)
End Sub

Public Function Obj2() As DataSet
        Return objResultssData.Obj2()
    End Function
End Class  

C:\ Company \ Main \ Source \ DataLayer\Object2.vbにあるObj2ファイル

Imports Microsoft.VisualBasic
Imports System
Imports System.Data
Imports System.Configuration
Imports System.Globalization
Imports System.Web
Imports System.Data.Common
Imports Company.FoundationLibrary.Data
Imports Company.FoundationLibrary.ExceptionHandling
Imports Company.Web.TMSuite.DataAccess.ExceptionPolicies
Imports System.Data.SqlClient

Public Class ResultsData
    Inherits BaseData

    Public Sub New(ByVal databaseName As String)
        db = New Database(databaseName)  //Error Throughing at this line as -> ""System.ArgumentException: The value can not be null or string or empty.""
    End Sub

  Public Function Obj2() As DataSet
        Dim errorMessage As String = Nothing
        Dim ds As New DataSet
        Dim cmd As DbCommand

        ds.Locale = CultureInfo.InvariantCulture
        Try
            cmd = db.GetStoredProcCommand("db_StoredProcedue")

            db.AddOutParameter(cmd, "@pErrorMessage", DbType.String, ErrorMessageSize)

            ds = db.ExecuteDataSet(cmd)

            If Not IsDBNull(db.GetParameterValue(cmd, "@pErrorMessage")) Then
                errorMessage = db.GetParameterValue(cmd, "@pErrorMessage")
            End If

        Catch ex As Exception

            Dim blnRethrow As Boolean = ExceptionPolicy.HandleException(ex, DataAccessExceptionPolicy)

            If blnRethrow Then
                Throw
            End If
        End Try

        Return ds

    End Function
End Class  

この問題を解決するために追加のコードを投稿する必要がある場合は、お知らせください。

4

2 に答える 2

0

コードサンプルにタイプミスがあると思いますが、私が読んでいるものに基づいて、Workflow クラスの呼び出しから objResults クラスのコンストラクターにデータベース名を渡すことに失敗していると思います。これは、例外をスローする null として暗黙的に提供されます。

「Private objResultsData as ResultsData」は実際には「Private objResultsData as objResults」と宣言される、objResults クラスは「ResultsData」として宣言されるはずであるという推論に基づいています。コードを誤解している場合は、お詫び申し上げます。

EDIT : OP フィードバックに基づいて、Workflow クラスにはデータベース名を含むコンストラクターとメンバー フィールドが必要です。これを使用して、ResultsData クラスを明示的に初期化し、問題を解決できます。それが役立つことを願っています!

Imports System.Globalization
Imports Company.Web.TMSuite.DataAccess
Imports Company.Web.TMSuite.TMSuiteComponents
Public Class Workflow
    Private databaseName as String
    Private objResultsData As ResultsData
    Public Sub New (DatabaseName as String)
        Me.databaseName = DatabaseName
    End Sub
    Public Function Obj2() As DataSet
        objResultsData = new ResultsData(Me.DatabaseName)
        Return objResultsData.Obj2() ' Alternate possibility is to pass the name as parm here
    End Function
End Class 

次に、ワークフローのインスタンス化を変更して、データベース名をコンストラクターに含める必要があります。コンストラクターはデータベース名をチェーンに渡します。上記のコードはテストされていませんが、関連するポイントを説明する必要があります。

于 2012-07-17T13:46:55.583 に答える
0

問題の原因は次のとおりです。

C:\Company\Main\Source\Project\Forms\webpage.aspx.vb および webpage.vb のメソッドについては、basepage.databasename プロパティからデータベースにアクセスします。


ただし、basepage.databasename プロパティC:\Company\Main\Source\Project\App_Code\Application\ResultDataset.vbからデータベースにアクセスできません。

于 2012-07-17T15:08:49.230 に答える