如何从字符串函数返回值
本文关键字:函数 返回值 字符串 | 更新日期: 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.Empty
或return null
。
在它被调用的地方你可以像这样检查
if(!String.IsNullOrEmpty(Dohvati_IDOC()))
{
//Code here
}
else
{
//Code here
}