2012-12-14 3 views
0

Mon C# codage à la page principale est la suivantevisual studio 2012 C# capture erreur d'exception

DBLayer odb = new DBLayer(); 

SqlDataReader dr; 

DataSet ds = new DataSet(); 

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (DropDownList1.SelectedItem.ToString() == "Commercial") 
    { 

     bind1(); 
    } 
    else if (DropDownList1.SelectedItem.ToString() == "Residential") 
    { 
     bind2(); 
    } 
    else 
    { 
     bind3(); 
    } 
} 
public void bind1() 
{ 
    string query = "select * from commercialproperty"; 
    dr = odb.SelectMethod(query); 
    if (dr.Read()) 
    { 
     Label11.Text = dr[0].ToString(); 
     Label1.Text = dr[1].ToString(); 
     Label2.Text = dr[2].ToString(); 
     Label3.Text = dr[3].ToString(); 
     Label4.Text = dr[4].ToString(); 
     Label5.Text = dr[5].ToString(); 
     Label6.Text = dr[6].ToString(); 
     Label7.Text = dr[7].ToString(); 
     Label8.Text = dr[8].ToString(); 
     Label9.Text = dr[9].ToString(); 
     Label10.Text = dr[10].ToString(); 
    } 
    else 
    { 
     Response.Write("<script>alert('Record Not Found')</script>"); 
    } 
} 

}

Mon code dans DBLayer.cs est le suivant

public class dblayer

{

public SqlConnection _SqlConnection; 

    public SqlCommand _SqlCommand; 

    public SqlDataAdapter _SqlDataAdapter; 

    public SqlDataReader _SqlDataReader; 

    public DataSet _DataSet; 

public DBLayer() 
{ 
} 
    public int InsertEditDelete(string query) 
    { 
     int i; 
     try 
     { 

      _SqlConnection = new SqlConnection("server=.;user id=sa;password=sa;initial catalog=RealEstate"); 
      _SqlConnection.Open(); 
      _SqlCommand = new SqlCommand(query, _SqlConnection); 
      i = _SqlCommand.ExecuteNonQuery(); 

     } 
     catch (Exception ied) 
     { 
      i = -1; 


     } 
     finally 
     { 

      _SqlConnection.Dispose(); 
      _SqlCommand.Dispose(); 
      _SqlConnection.Close(); 

     } 
     return i; 
    } 
    public DataSet DataAdapter(string query, string tname) 
    { 
     try 
     { 
      _SqlConnection = new SqlConnection("server=.;user id=sa;password=sa;initial catalog=RealEstate"); 
      _SqlConnection.Open(); 
      _SqlDataAdapter = new SqlDataAdapter(query, _SqlConnection); 

      _DataSet = new DataSet(); 
      _SqlDataAdapter.Fill(_DataSet,tname); 


     } 
     catch (Exception ds) 
     { 
      _DataSet = null; 

     } 
     finally 
     { 
      _SqlConnection.Dispose();    
      _SqlConnection.Close(); 
     } 
     return _DataSet; 
    } 
    public SqlDataReader SelectMethod(string query) 
    { 
     try 
     { 
      _SqlConnection = new SqlConnection("server=.;user id=sa;password=sa;initial catalog=RealEstate"); 
      _SqlConnection.Open(); 
      _SqlCommand = new SqlCommand(query, _SqlConnection); 
      _SqlDataReader = _SqlCommand.ExecuteReader(); 
     } 
     catch (Exception sm) 
     { 
     _SqlDataReader = null; 

     } 
     return _SqlDataReader; 
    } 

}

quand je lance le site web, il est exploser au point suivant, si (dr.Read()) [Message d'erreur:. Référence d'objet non définie à une instance d'un objet]

que suis-je disparu? Je suis un peu un débutant: aide P pour résoudre ce problème se déroulera sur le site wonderfuly grâce

+0

code exploding: crikey –

+1

qu'est-ce que 'odb' quand sa fonction' SelectMethod (string) 'résulte-t-elle' null'? – Jodrell

+1

Voici un bon exemple de lecture à partir d'une base de données SQL: http://www.dotnetperls.com/sqlconnection. Cela pourrait aider. – FishBasketGordo

Répondre

2

Je ne sais pas ce qui est odb dans votre code, mais le point est que SelectMethod est de retour nul.

Après avoir modifié, il semble que le coupable est le bloc try/catch dans votre SelectMethod: probablement une exception est soulevée, et puisque vous venez de rien avec elle, vous ne pouvez pas comprendre ce qui se passe mal:

try { 
    // do DB stuff... 
} 
catch (Exception sm) { // What does this exception contain??? 
    _SqlDataReader = null; 
} 

Essayez d'entrer votre code avec le débogueur et voir quelle est l'exception. Si vous ne pouvez pas faire cela, il suffit de retirer le bloc catch: comme vous pouvez le voir, il ne fait que masquer l'échec de la cause, mais cela ne fonctionne pas magiquement :)

+0

si quelqu'un a le temps pour moi, je peux leur envoyer le projet pour le vérifier si possible? besoin d'aide mal je suis tellement confus à ce stade –

+0

@LeachimHca: voir ma réponse mise à jour. Et en passant, pouvez-vous (et savez-vous chaud à) déboguer votre code? –

+0

* Si vous ne pouvez pas faire cela, il suffit de retirer le bloc catch: * Non Si vous n'avez qu'à retirer les blocs catch. –

0

J'ai vu au moins 4 problèmes dans votre code 1. vous avalez silencieusement votre exception dans votre code, ne fait aucun sens.

try 
    { 
     _SqlConnection = new SqlConnection("server=.;user id=sa;password=sa;initial catalog=RealEstate"); 
     _SqlConnection.Open(); 
     _SqlCommand = new SqlCommand(query, _SqlConnection); 
     _SqlDataReader = _SqlCommand.ExecuteReader(); 
    } 
    **catch (Exception sm) 
    { 
    _SqlDataReader = null; 
    }** 

2. vous disposiez de votre connexion avant de le fermer, l'exception sera lancée dans la finale.

finally 
    { 
     _SqlConnection.Dispose();    
     _SqlConnection.Close(); 
    } 

3. ce n'est pas une meilleure prectice à avaler l'exception et ne rien faire, vous avez perdu votre stacktrace.

4 set _sqlconnection et que l'objet non géré soit globle variable sans implémenter IDisposable n'est pas bon.

Enfin, définissez un point d'arrêt sur la ligne de code où l'exception a été lancée et essayez de déboguer votre code vous-même.