2009-12-18 2 views
0

여기에서 문제가 발생했습니다. 희망 하시겠습니까? D무효 데이터 집합, 이유는 무엇입니까?

내가 만드는 소프트웨어는 간단한 영화 정보를 관리합니다.이 양식은 특정 영화의 데이터를 편집해야합니다. 아래 코드를 통해 양식은 DB에서 수집 한 데이터로 채워집니다. ("영화"는 분명히 선언 된 데이터 세트입니다).

public short popolaModificaFilm(string titolo, ref TextBox txtAnno, ref TextBox txtCast, ref TextBox txtDurata, ref TextBox txtLocandina, ref TextBox txtRegista, ref TextBox txtTitolo, ref TextBox txtTrailer, ref TextBox txtTrama, ref ComboBox cmbGenere, ref ComboBox cmbNaz, ref CheckBox chkPellicola, ref CheckBox chkDigitale, ref CheckBox chk3d) 
    { 
     service.ricercaFilm(titolo).CopyToDataTable(cinema.film, LoadOption.PreserveChanges); 
     dsCinema.filmRow film = cinema.film[0]; 
     txtAnno.Text = film["anno"].ToString().Trim(); 
     txtCast.Text = film["cast"].ToString().Trim(); 
     txtDurata.Text = film["durata"].ToString().Trim(); 
     txtLocandina.Text = film["locandina"].ToString().Trim(); 
     txtRegista.Text = film["regista"].ToString().Trim(); 
     txtTitolo.Text = film["titolo"].ToString().Trim(); 
     txtTrailer.Text = film["trailer"].ToString().Trim(); 
     txtTrama.Text = film["trama"].ToString().Trim(); 
     inserisciFilmCombo(ref cmbGenere,ref cmbNaz); 
     cmbGenere.SelectedValue = film["genere"]; 
     cmbNaz.SelectedValue = film["nazionalita"]; 
     if ((bool)film["pellicola"]) 
     { 
      chkPellicola.Checked = true; 
     } 
     if ((bool)film["digitale"]) 
     { 
      chkDigitale.Checked = true; 
     } 
     if ((bool)film["tridimensionale"]) 
     { 
      chk3d.Checked = true; 
     } 
     return short.Parse(film["id"].ToString()); 
    } 

다른 버튼을 통해 사용자는 (데이터 세트에서) 정보를 업데이트 할 수 있습니다. 이는 방법 :

 public void aggiornaFilm(short id, string titolo, string regista, string cast, int anno, int durata, string trama, string trailer, string genere, string nazionalita, string locandina, bool pellicola, bool digitale, bool tridimensionale) 
    { 
     dsCinema.filmRow film = cinema.film.FindByid(id); 
     if (!titolo.Equals("")) 
     { film["titolo"] = titolo; } 
     if (!regista.Equals("")) 
     { film["regista"] = regista; } 
     if (!cast.Equals("")) 
     { film["cast"] = cast; } 
     if (!trama.Equals("")) 
     { film["trama"] = trama; } 
     if (!trailer.Equals("")) 
     { film["trailer"] = trailer; } 
     if (!genere.Equals("")) 
     { film["genere"] = genere; } 
     if (!locandina.Equals("")) 
     { film["locandina"] = locandina; } 
     if (!anno.ToString().Equals("")) 
     { film["anno"] = anno; } 
     if (!nazionalita.Equals("")) 
     { film["nazionalita"] = nazionalita; } 
     if (!durata.ToString().Equals("")) 
     { film["durata"] = durata; } 
     film["pellicola"] = pellicola; 
     film["digitale"] = digitale; 
     film["tridimensionale"] = tridimensionale; 
    } 

내가 Visul 스튜디오는 folowing 예외를 침이 기능을 사용하려고 :

System.NullReferenceException이 처리되지 않은 메시지 = "개체 참조의 인스턴스로 설정되지 않았습니다를 객체." 소스 내가 "popolaModificaFilm"를 통해 데이터를 주입 한에도 불구하고 내가 (그래서 분명히 yhe이 메소드는 null를 돌려줍니다 찾기) ("aggiornaFilm"의 시작 부분에) 데이터 세트가 비어있는 것으로 나타났습니다

= "BusinessLogicalLayer". 두 메서드 (aggiornaFilm & popolaModificaFilm)는 같은 클래스에 있으며 같은 형식으로 호출됩니다.

도움이 필요하시면 Tnx, 영어 불쌍히 생각해서 죄송합니다.

+0

어떤 응용 프로그램입니까? asp.net 또는 windows? – Raymond

+0

그것은 Windows 응용 프로그램입니다. – Abaco

+0

클래스 정의 방법, dsCiname 정의 방법에 대한 자세한 정보를 추가해야 할 수도 있습니다. 두 클래스를 서로 다른 두 인스턴스에서 호출 할 가능성이 있습니까? – Raymond

답변

0

서비스 개체가 데이터를 올바르게 반환하지 않는 것 같습니다. 서비스가 올바르게 실행되는지 확인해야합니다.

+0

죄송합니다. 밑줄을 그어 표시하지 않았습니다. 먼저 객체 "서비스"를 호출하면 데이터 세트 "시네마"에 행이 포함됩니다. 그러나 주어진 id로 필름을 추출하기 위해 데이터 세트를 쿼리 할 때 null 응답을 받았습니다. 디버거를 통해 데이터 세트가 실제로 null임을 발견했습니다. – Abaco

+0

'cinema = null'할당 코드를 확인합니다. 아니면 어딘가 초기화 함수를 호출하는 것입니다. 객체가 파란색에서 벗어나지 않는 것은 null이됩니다. –

0

비어 있습니까 아니면 null입니까? 이 (가) cinema가 null입니까?

도트 연산자를 사용하여 액세스하지만 도트의 왼쪽이 null이므로이 예외가 발생합니다.

정확한 행을 찾으려면 코드를 단계별 실행하고 예외가 발생하면 무엇이 잘못되었는지 확인하십시오.

(이 클래스에는 없지만 호출중인 서비스에서도) - 디버거가 여기에 친구가됩니다.