如何从字符串函数返回值

本文关键字:函数 返回值 字符串 | 更新日期: 2023-09-27 18:08:14

我有这个代码,我想返回一个值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());
        }
    }

如何从字符串函数返回值

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

只需在捕获时添加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;

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

在catch中添加一个返回语句,如return String.Emptyreturn null

在它被调用的地方你可以像这样检查

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