2012-06-26 2 views
0

Может ли кто-нибудь мне помочь, визуальное базовое приложение подскажет мне сообщение «Ссылка на объект не установлена ​​в экземпляр объекта». У меня есть 2 проекта в одном решении. Один из них разработан в C#, а другой - в vb. Я вызываю метод проекта C# в проекте vb. код 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 

Я звоню в приложение vb из приложения C#. как:

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

, когда я отладки VB проект индивидуально работает должным образом, и когда я вызвать приложение VB из C# приложения, это вызвало ошибку. Я пропустил ссылку на .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 
+3

В какой строке вы получаете исключение – Habib

+3

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

+0

Что такое 'val' в вашем коде ..? –

ответ

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") 
     } 
     } 
    } 
    } 
} 

Я использую 5, если заявление, как и выше, потому VB.NET делает не оптимизировать при вычислении оператора «& &».

+1

В VB.Net вы должны использовать 'AndAlso', если хотите, чтобы он закорочился. – Thomas

+0

по-прежнему сталкивается с такой же ошибкой ....... помогите мне. – akkhatri

+0

Итак, есть только вероятность того, что Ds_Themes.Tables (0) .Rows (0) равно null, проверьте это. – Thinhbk

Смежные вопросы