Проблема с использованием return () в asp.net c # - PullRequest
0 голосов
/ 07 января 2011
    string casetype6(HiddenField HiddenField1,DropDownList DropDownList3)
        {
            String casetype1="";

            try
            {
                OdbcConnection casetype = new OdbcConnection("Driver={MySQL ODBC 3.51 Driver};Server=10.155.160.130;Database=testcase;User=root;Password=;Option=3;");
                casetype.Open();

                //************to get case type    
                string casetypequery = "select casename from casetype where skey=?";

                //************to get case type
                OdbcCommand casetypecmd = new OdbcCommand(casetypequery, casetype);
                String casetypefromdropdown = DropDownList3.SelectedItem.ToString();
                casetypecmd.Parameters.AddWithValue("?", casetypefromdropdown);
                using (OdbcDataReader casetypeMyReader = casetypecmd.ExecuteReader())
                {
                    while (casetypeMyReader.Read())
                    {
                        String casename = casetypeMyReader["casename"].ToString();
                        HiddenField1.Value = casename;
                        casetype1=HiddenField1.Value.ToString();
return casetype1;
                    }
                }

            }
            catch(Exception ep)
            { }
        }

Я хочу использовать casetype1 вне этого метода.Как мне это сделать?Если я скажу return casetype1, тогда ошибка будет выглядеть так:

    'Data.casetype6(System.Web.UI.WebControls.HiddenField, System.Web.UI.WebControls.DropDownList)': not all code paths return a value

Ответы [ 3 ]

3 голосов
/ 07 января 2011

Ваш метод не возвращает ничего, если вы как-то не введете while loop (если ваш casetypeMyReader пуст) или выдается какое-то исключение (не удалось подключиться к базе данных). Ниже приведен измененный код. Посмотри.

string casetype6(HiddenField HiddenField1,DropDownList DropDownList3)
{
    String casetype1="";

    try
    {
        OdbcConnection casetype = new OdbcConnection("Driver={MySQL ODBC 3.51 Driver};Server=10.155.160.130;Database=testcase;User=root;Password=;Option=3;");
        casetype.Open();

        //************to get case type    
        string casetypequery = "select casename from casetype where skey=?";

        //************to get case type
        OdbcCommand casetypecmd = new OdbcCommand(casetypequery, casetype);
        String casetypefromdropdown = DropDownList3.SelectedItem.ToString();
        casetypecmd.Parameters.AddWithValue("?", casetypefromdropdown);
        using (OdbcDataReader casetypeMyReader = casetypecmd.ExecuteReader())
        {
            while (casetypeMyReader.Read())
            {
                String casename = casetypeMyReader["casename"].ToString();
                HiddenField1.Value = casename;
                casetype1 = HiddenField1.Value.ToString();
                break; // instead of returning from here, break the loop
            }
        }

    }
    catch(Exception ep)
    { }

    return casetype1; // and return here.
}
1 голос
/ 07 января 2011

Положите return casetype1; после окончания скобок секции захвата.

1 голос
/ 07 января 2011

Вам нужно добавить что-то вроде return string.Empty или , желательно сделать что-то с исключением в вашем блоке catch.

Всегда есть спор о том, куда поместить return, будь то в конце метода или в том месте, куда вы хотите вернуться.Мне лично нравится возвращаться туда, где может быть возвращено значение, а затем разбираться с другими проблемами, с которыми их нужно решать - в данном случае, блоком catch.

...