0

Visual Basic アプリケーションで「オブジェクト参照がオブジェクトのインスタンスに設定されていません」というメッセージが表示されます。1 つのソリューションに 2 つのプロジェクトがあります。1 つは C# で開発され、もう 1 つは vb で開発されています。vb プロジェクトで c# プロジェクトのメソッドを呼び出しています。vbコードは次のとおりです。

    Dim objUserProfileSystem As New IndexCatalogSystem() // c# project class
    Dim Ds_Themes As New DataSet()                       //dataset
    Ds_Themes = objUserProfileSystem.FillThemes(msg, 1)  //c# class method returning dataset
    ThemeID = Ds_Themes.Tables(0).Rows(0)("ThemeID")     //getting themeid from dataset

c# アプリケーションから vb アプリケーションを呼び出しています。お気に入り:

    System.Diagnostics.Process.Start(Application.StartupPath + "\\DocumentViewer.exe ", " (" + val + ") ");

vb プロジェクトを個別にデバッグすると正常に動作し、c# アプリケーションから vb アプリケーションを呼び出すと、エラーが表示されます。.net フレームワークの参照を見逃していますか?

これが Fill_Theme メソッドです。

   public DataSet FillThemes(ref String msg, int UserID)
        {
            try
            {
                //inilialize the Connection 
                Connection objCon = new Connection();
                if (objCon.Ini_Connection(ref msg) == true)
                {
                    //declare data set
                    DataSet DsGroup = new DataSet();
                    //declare data adapter
                    SqlDataAdapter DaRole = new SqlDataAdapter();

                    //initialize Sql Select Command and fill dataset
                    DaRole.SelectCommand = new SqlCommand("SELECT ThemeID FROM DMUsers where UserID = " + PARA_User_ID, objCon.con);
                    DaRole.SelectCommand.Parameters.Add(PARA_User_ID, SqlDbType.Int).Value = UserID;
                    DaRole.SelectCommand.CommandType = CommandType.Text;
                    DaRole.Fill(DsGroup, "DMUsers");

                    //Dispose object
                    objCon.Dispose_Con(ref msg);
                    DaRole.SelectCommand.Dispose();
                    DaRole.Dispose();

                    //Return Folder Dataset
                    objCon.Dispose_Con(ref msg);
                    return DsGroup;
                }
                else
                {
                    msg = "Connect ion fail contact Administrator";
                }
                return null;
            }

テーマを呼び出すために開発したメソッド全体。

  Private Sub Themes()
    Dim objUserProfileSystem As New IndexCatalogSystem()
    Dim Ds_Themes As New DataSet()
    Ds_Themes = objUserProfileSystem.FillThemes(msg,modCommon.UserID)
    ThemeID = Ds_Themes.Tables(0).Rows(0)("ThemeID")

    If Ds_Themes IsNot Nothing Then
        If ThemeID = 1 Then
            MessageBox.Show("6")
            THEMES3Blue()
        ElseIf ThemeID = 2 Then
            THEMES2Olive()
        ElseIf ThemeID = 3 Then
            THEMES1Silver()
        Else
            THEMES1Silver()
        End If
    End If
End Sub
4

1 に答える 1

0

この行で、問題が発生する可能性があることがわかります。

ThemeID = Ds_Themes.Tables(0).Rows(0)("ThemeID") 

これを試して:

if(Ds_Themes != null) {
 if( Ds_Themes.Tables != null) {
    if( Ds_Themes.Tables.Size() > 0) {
       if(Ds_Themes.Tables(0).Rows != null) {
         if(Ds_Themes.Tables(0).Rows.Size() > 0) {
          ThemeID = Ds_Themes.Tables(0).Rows(0)("ThemeID")
         }
       }
    }
  }
}

「&&」演算子を計算するときに VB.NET が最適化されないため、上記のような 5 つの if ステートメントを使用します。

于 2012-06-27T06:18:25.147 に答える