2017-09-13 1 views
-11

i verwendet drei Ebenen-Architektur System.IndexOutOfRangeException: Code eingeben hier Es gibt keine Zeile an Position 1 hier mit i mein Code hier einfügenBitte mir sagen, wo ich bin wrom, wie es zu korrigieren:

Datenschicht

Die Daten acess Schicht

public DataSet getRecordDisplay(int product_id,int category_id) 
      { 
       string constring = string.Empty; 

       SqlConnection conn; 


       constring = ConfigurationManager.ConnectionStrings["MyConnection"].ConnectionString; 
       conn = new SqlConnection(constring); 
       conn.Open(); 
       SqlCommand cmd = new SqlCommand("sp_Productselect", conn); 
       cmd.CommandText = "sp_Productselect"; 
       cmd.CommandType = CommandType.StoredProcedure; 
       cmd.Parameters.AddWithValue("@product_id", DbType.Int32).Value = product_id; 
       cmd.Parameters.AddWithValue("@category_id", DbType.Int32).Value = category_id; 
       SqlDataAdapter adpt = new SqlDataAdapter(cmd); 
       DataSet dst = new DataSet(); 
       adpt.Fill(dst); 
       return dst; 

      } 

#Business logic 

Geschäftslogikschicht

hier eingeschlossen ist
public DataSet getRecordDisplay(int product_id,int category_id) 
     { 
      DataSet ds = new DataSet(); 
      ds = dal.getRecordDisplay(product_id,category_id); 
      return ds; 
     } 

# code behind 


    int product_id = Convert.ToInt32(txtPId.Text); 
       int category_id = Convert.ToInt32(txtctid.Text); 
       DataSet dsOrderDetail = new DataSet(); 


         dsOrderDetail = bal.getRecordDisplay(product_id, category_id); 
        lblProdName.Text = dsOrderDetail.Tables[0].Rows[0]["Product_Name"].ToString() + "<br/>"; 
        lblProdId.Text = dsOrderDetail.Tables[0].Rows[1]["Product_Id"].ToString() + "<br/>"; 
        lblProdDesc.Text = dsOrderDetail.Tables[0].Rows[2]["Description"].ToString() + "<br/>"; 
        lblCtyId.Text = dsOrderDetail.Tables[0].Rows[3]["Category_id"].ToString() + "<br/>"; 
        lblPrice.Text = dsOrderDetail.Tables[0].Rows[4]["Price"].ToString() + "<br/>"; 
        lblAblty.Text = dsOrderDetail.Tables[0].Rows[5]["Availability"].ToString() + "<br/>"; 

#my stored procedure 


stored procedure is added here 
     GO 
      CREATE PROCEDURE [dbo].[sp_Productselect] 
      @product_id as int, 
      @category_id as int 
     AS 
     BEGIN 

      SELECT * FROM product04 where product_id=345 and category_id=2346 
     END 

     GO 
+0

Die Ausnahme ist ziemlich klar. Sie versuchen, Daten von einer Position zu lesen, die nicht existiert. Wahrscheinlich, weil Sie versuchen, Daten aus 6 Zeilen anstatt nur einer Zeile zu lesen. – waka

+0

Wenn Sie ein Array mit drei Elementen wie diesem 'string [3]' hatten und Sie versuchten, auf die vierte Position zuzugreifen, würden Sie einen 'index out of range' Fehler bekommen. Sie machen dasselbe, Sie versuchen, auf einen Index zuzugreifen, der nicht existiert. Wir können nicht sagen, woher von dem Code, den Sie zur Verfügung gestellt haben, Sie uns nicht einmal sagen, in welcher Zeile der Fehler auftritt ... – Equalsk

+0

Vielen Dank, dass es funktioniert – sangeetha

Antwort

0

Sie müssen auch überprüfen, ob die Abfrage Daten zurückgibt oder nicht, Sie stehen vor einem Problem, weil Sie versuchen, auf Daten zuzugreifen, die nicht vorhanden sind. Ich hoffe du hast verstanden.

dsOrderDetail = bal.getRecordDisplay(product_id, category_id); 

if(dsOrderDetail !=null && dsOrderDetail.Table.Count > 0 && dsOrderDetail.Table.Rows.Count >0) 
{ 
    lblProdName.Text = dsOrderDetail.Tables[0].Rows[0]["Product_Name"].ToString() + "<br/>"; 
    lblProdId.Text = dsOrderDetail.Tables[0].Rows[1]["Product_Id"].ToString() + "<br/>"; 
    lblProdDesc.Text = dsOrderDetail.Tables[0].Rows[2]["Description"].ToString() + "<br/>"; 
    lblCtyId.Text = dsOrderDetail.Tables[0].Rows[3]["Category_id"].ToString() + "<br/>"; 
    lblPrice.Text = dsOrderDetail.Tables[0].Rows[4]["Price"].ToString() + "<br/>"; 
    lblAblty.Text = dsOrderDetail.Tables[0].Rows[5]["Availability"].ToString() + "<br/>"; 
} 

gibt es Problem mit Ihnen gespeicherte Prozedur

SELECT * FROM product04 where product_id=345 and category_id=2346 

statt dieser Linie der Abfrage sollte es sein

CREATE PROCEDURE [dbo].[sp_Productselect] 
     @product_id as int, 
     @category_id as int 
    AS 
    BEGIN 

     SELECT * FROM product04 where [email protected]_id and [email protected]_id 
    END 

    GO 

es gibt andere, was in Sie Code, die Sie verwenden sollten „mit "Für die Verbindung, um es zu entsorgen.

public DataSet getRecordDisplay(int product_id,int category_id) 
{ 
... 
    using(SqlConnection con = new SqlConnection(connectionstring)) 
    { 
    } 
... 
} 
+0

danke ignot es – sangeetha

Verwandte Themen