C# 异常错误处理

C# 异常错误处理,c#,asp.net,database,sql-server-2008,C#,Asp.net,Database,Sql Server 2008,每当我想在我的航空公司预订系统项目中预订航班时,上图中就会出现此错误。我的代码中出现异常错误。此错误消息会弹出 IndexOutOfRangeException不由用户代码处理 …我的代码是用c sharp在asp.net中编写的,有什么想法吗 这是密码 public partial class TICKET_BOOKING : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) {

每当我想在我的航空公司预订系统项目中预订航班时,上图中就会出现此错误。我的代码中出现异常错误。此错误消息会弹出

IndexOutOfRangeException不由用户代码处理

…我的代码是用c sharp在asp.net中编写的,有什么想法吗

这是密码

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;
    }

你的数据表中没有记录,所以下一步

dt.Rows[0][0]
失败了。在加入之前,请检查表是否有记录。诸如此类:

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

    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;
        }
    }

我尝试了这个方法,虽然另一个错误是出现了违反主键约束“PK_Plist”的情况,但它似乎有效。无法在对象“dbo.Plist”中插入重复的键。我在那里重试了另一个错误ExecuteReader:尚未初始化连接属性。在执行当前web请求期间发生未处理的异常。请查看堆栈跟踪,以了解有关错误及其在代码中起源的详细信息。异常详细信息:System.InvalidOperationException:ExecuteReader:Connection属性尚未初始化。第31行:使用(var reader=cmd.ExecuteReader(CommandBehavior.CloseConnection))使用Connection=con编辑,请立即尝试。现在它告诉我SqlException未被用户处理。违反主键约束“PK_Plist”。无法在对象“dbo.Plist”中插入重复键。该语句已终止。当您尝试插入已存在的相同值(我们知道)时,会发生此错误主键冲突。但实际上您并没有插入任何记录,因为您正在查询“从pid中选择pid”。您使用的是相同的查询吗?这对我来说很好。