如何从字符串函数返回一个值

时间:2014-06-11 13:00:48

标签: c#

我有这个代码,我想返回一个值Lidoc_num,但是我收到了一个错误 "并非所有代码路径都返回一个值" ....有人可以解决这个问题,请

 public string Dohvati_IDOC()
 {
     try
     {
            //Spoji se na Oracl
            SpajanjeNaOracle();

            //Postavi transakcijski objekt kroz koji ćeš izvršiti PL/SQL proceduru - ORACLE baza podataka
            com1.Connection = ora_cn;
            com1.CommandType = CommandType.Text;

            //-- PRIPREMA TRANSAKCIJE NA ORACLE-u
            ora_trn = ora_cn.BeginTransaction(IsolationLevel.ReadCommitted);
            com1.CommandType = CommandType.StoredProcedure;
            com1.Transaction = ora_trn;

            //Učitavanje parametara za dohvat broja idoc-a
            foreach (DataRow dr_art_apa in ds.Tables["Agr3PLInventoryTransaction"].Rows)
            {

                //Provjera učitava li se dokument ili artikl
                ////Izlazni parametra iz funkcije - > Broj dokumenta

                System.Data.OracleClient.OracleParameter prm = new System.Data.OracleClient.OracleParameter();
                prm.Direction = ParameterDirection.ReturnValue;
                prm.DbType = DbType.AnsiString;
                prm.Size = 16;
                com1.Parameters.Add(prm);

                msg_type = ds.Tables["Header"].Rows[0]["MessageType"].ToString();

                sender =   ds.Tables["Sender"].Rows[0]["LogicalId"].ToString();
                sender = sender.Length > 17 ? sender.Substring(0, 17) : sender;

                reciver =  ds.Tables["Receiver"].Rows[0]["LogicalId"].ToString();
                reciver = reciver.Length > 17 ? reciver.Substring(0, 17) : reciver;

                string var_date = ds.Tables["ApplicationArea"].Rows[0]["CreationDateTime"].ToString();
                DateTime dt = DateTime.Parse(var_date);
                cre_date = dt.ToString("dd.MM.yyyy");

                bod_ID = ds.Tables["ApplicationArea"].Rows[0]["BODId"].ToString();
                bod_ID = bod_ID.Length > 22 ? bod_ID.Substring(0, 21) : bod_ID;

                //Predaj parametre funkciji i vrati broj dokumenta iz baze
                com1.CommandText = "TRB01.set_idoc('" + msg_type + "','1','"
                                                      + sender + "','"
                                                      + reciver + "','"
                                                      + cre_date + "','"
                                                      + bod_ID + "')";

                com1.ExecuteNonQuery();

                Lidoc_num = com1.Parameters[0].Value.ToString();

            }

            return Lidoc_num;

        }
        catch (OracleException ex)
        {
            if (ora_trn != null) ora_trn.Rollback();

            if (ora_cn != null)
                if (ora_cn.State != ConnectionState.Closed)
                    ora_cn.Close();

            WriteErrors.WriteToLogFile("Dohvati_IDOC", "Greška:" + ex.ToString());
        }

    }

3 个答案:

答案 0 :(得分:4)

如果在返回之前捕获了一个错误,它将反弹到catch块,然后在没有返回值的情况下掉线。你需要在catch块之后返回。

答案 1 :(得分:2)

只需在catch中添加return或将返回结果添加为字符串

    string result = string.Empty;

       try
       {
        // code here 
          Lidoc_num = com1.Parameters[0].Value.ToString();
          result = Lidoc_num;
       }
    catch (OracleException ex)
            {
                if (ora_trn != null) ora_trn.Rollback();

                if (ora_cn != null)
                    if (ora_cn.State != ConnectionState.Closed)
                        ora_cn.Close();

                WriteErrors.WriteToLogFile("Dohvati_IDOC", "Greška:" + ex.ToString());

                result = "";
            }

return result;

答案 2 :(得分:1)

如果有例外怎么办?代码进入catch,但你不会从那里返回任何东西。

return String.Emptyreturn null等抓取中添加一个return语句。

并且在哪里调用你可以像这样检查

if(!String.IsNullOrEmpty(Dohvati_IDOC()))
{
    //Code here
}
else
{
    //Code here
}