none
try块内赋值,为何不抛出异常就提示使用了未赋值的变量 RRS feed

  • 问题

  • double Get_Page_Nummber(string tableName)
            {
                //获取搜索结果总共有多少页
                int rows;
                string connectionString = PubConstant.ConnectionString;   //获取连接字符串
                string filter_strsql = Creat_filter_strsql();
                string SQLString = "SELECT count(*) From " + tableName + " " + filter_strsql;
                
                using (SqlConnection connection = new SqlConnection(connectionString))
                {
                    using (SqlCommand cmd = new SqlCommand(SQLString, connection))
                    {
                        try
                        {
                            connection.Open();
                            rows = (int)cmd.ExecuteScalar();
                            
                        }
                        catch (System.Data.SqlClient.SqlException e)
                        //catch
                        {
                            connection.Close();
                            throw e;
                            
                        }
                        return Math.Ceiling(Convert.ToDouble(rows / int.Parse(DropDownList1.SelectedValue)));
                    }
                }
                
                //Response.Write(strsql + "        " + roms_number);
                
            }
    double Get_Page_Nummber(string tableName)
            {
                //获取搜索结果总共有多少页
                int rows;
                string connectionString = PubConstant.ConnectionString;   //获取连接字符串
                string filter_strsql = Creat_filter_strsql();
                string SQLString = "SELECT count(*) From " + tableName + " " + filter_strsql;
                
                using (SqlConnection connection = new SqlConnection(connectionString))
                {
                    using (SqlCommand cmd = new SqlCommand(SQLString, connection))
                    {
                        try
                        {
                            connection.Open();
                            rows = (int)cmd.ExecuteScalar();
                            
                        }
                        //catch (System.Data.SqlClient.SqlException e)
                        catch
                        {
                            connection.Close();
                            //throw e;
                            
                        }
                        return Math.Ceiling(Convert.ToDouble(rows / int.Parse(DropDownList1.SelectedValue)));
                    }
                }
                
                //Response.Write(strsql + "        " + roms_number);
                
            }

    上面的写法是正确的,下面的写法就会提示你使用了未赋值的变量rows。同样是引发异常,一个往外抛出,一个没抛出,从结果来说rows都没被赋值,为啥写法一就是正确的?
    2012年10月11日 13:48

答案

  • 看了你的代码,尝试着分析一下:

    估计都是还没执行查询的时候就抛出异常,导致rows未赋值,代码一你捕获异常后关闭连接即抛出异常,程序终止,不在向下运行,因此不会抛出rows都没被赋值的异常;而代码二,你捕获异常后没有抛出,等于忽略异常继续向下执行,你最后一句代码用到了rows,而它却没有被赋值,因此系统抛出异常。

    2012年10月12日 9:32