2012-10-25 139 views
0

enter image description here异常错误处理

我有像这个错误上面每当我想预订我的机票预订系统项目飞行有我的代码中的异常错误此错误信息被弹出

IndexOutOfRangeException unhandles by user code

...任何想法,我怎么可以去它我的代码写在asp.net使用c sharp?

这是代码

public partial class TICKET_BOOKING : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 

    } 
    int a; 
    String constring = ConfigurationManager.ConnectionStrings["conn"].ConnectionString.ToString(); 
    public int Autonumber() 
    { 
     SqlConnection con = new SqlConnection(constring); 
     SqlCommand cmd = new SqlCommand(); 
     cmd.CommandType = CommandType.Text; 
     cmd.Connection = con; 
     con.Open(); 
     cmd.CommandText = "select pid from pid"; 
     SqlDataAdapter da = new SqlDataAdapter(); 
     DataSet ds = new DataSet(); 
     DataTable dt = new DataTable(); 
     da.SelectCommand = cmd; 
     da.Fill(dt); 
     a = Convert.ToInt32(dt.Rows[0][0].ToString()) + 1; //this is where its occuring 
     con.Close(); 
     return a; 
    } 

回答

2

试试这个

int a; 
    String constring = ConfigurationManager.ConnectionStrings["conn"].ConnectionString.ToString(); 
    public int Autonumber() 
    { 
     using (SqlConnection con = new SqlConnection(constring)) 
     { 
      SqlCommand cmd = new SqlCommand 
           { 
            CommandType = CommandType.Text, 
            Connection = con, 
            CommandText = "select pid from pid", 
           }; 
      con.Open(); 
      // cmd.Connection.Open(); 
      using (var reader = cmd.ExecuteReader(CommandBehavior.CloseConnection)) 
      { 
       while (reader.Read()) 
       { 
        if (!reader.IsDBNull(0)) 
         a = reader.GetInt32(0); 
       } 
      } 
      return a; 
     } 
    } 
+0

有输入错误和reader.close() –

+0

我再次尝试它有另一个错误ExecuteReader:连接属性尚未初始化。执行当前Web请求期间发生未处理的异常。请检查堆栈跟踪以获取有关错误以及源代码在何处的详细信息。异常详细信息:System.InvalidOperationException:ExecuteReader:Connection属性尚未初始化。线程31:using(var reader = cmd.ExecuteReader(CommandBehavior.CloseConnection )) –

+0

使用Connection = con编辑请现在尝试。 –

0

你不必在你确定年代一个记录,以便未来

dt.Rows[0][0] 

失败。请在加入之前检查表是否有记录。类似的东西:

if(dt.Rows.Count > 0) 
{ 
    a = Convert.ToInt32(dt.Rows[0][0].ToString()) + 1; 
} 
+0

我想这似乎工作,但另一个错误是弹出PRIMARY KEY约束“PK_Plist”的相关规定。不能在对象'dbo.Plist'中插入重复键。 –