代码之家  ›  专栏  ›  技术社区  ›  Nick

类中的异常处理和C语言的代码隐藏#

  •  1
  • Nick  · 技术社区  · 16 年前

    我有点困在一个asp.net项目,我正在做!我有一个从代码后面调用的类,它的许多函数没有返回类型ie,是void。那么如何处理异常呢????此外,如果类中的函数确实有返回类型,例如,数据集,那么如何返回异常或指示发生了异常?我附上了我的类中的以下代码,这些代码是从后面的代码引用的。

    public void fnRecord(string []varList, string fnName)
        {
            try
            {
                String x;
    
                StringBuilder SQLParameters = new StringBuilder();
    
                SQLParameters.AppendLine("SELECT #{Function}(");
                {
                    SQLParameters.Replace("#{Function}", fnName);
                }
    
                for (int i = 0; i < varList.Length; i++)
                {                   
                    x = varList[i].ToString();
                    SQLParameters.Append("'" + x + "',");
                }
    
                SQLParameters.Remove((SQLParameters.Length - 1), 1);
                SQLParameters.Append(")");
    
                string SQLCMD = SQLParameters.ToString();
    
                conn.Open();
                NpgsqlCommand command = new NpgsqlCommand(SQLCMD, conn);
                Object result = command.ExecuteScalar();
            }
    
            catch (NpgsqlException ne)
            {
                //return ne;
            }
    
            catch (Exception x)
            {
                //error code
            }
    
            finally
            {
                conn.Close();
            }
        }
    

    任何帮助都将不胜感激!

    谢谢

    3 回复  |  直到 16 年前
        1
  •  1
  •   OJ.    16 年前

    只有在打算正确处理异常的地方才能捕获异常。如果要反映ui中的错误,请在ui中捕获它们。如果您想处理它们并尝试在业务逻辑中处理问题,那么就抓住它们并在此时处理它们。

    顺便说一句,你的代码是可以接受的 SQL injection 攻击。最好去学点东西 parameterised queries .

        2
  •  0
  •   Tor Haugen    16 年前

    不返回异常。你扔了他们。这就是异常的意义-你不想异常处理弄乱你的方法签名!

    在catch子句中,实际上不做任何事情来处理异常。然后你根本不应该捕捉它们,只要让它们在你的代码后面冒泡,然后在那里捕捉它们——在方法调用周围放置一个try-catch。

    或者,在方法中捕获sql异常,然后抛出一个带有一些合理消息的新异常,将sql exceptions添加为内部异常,如下所示

    catch (NpgsqlException ne)
    {
        throw new Exception("Your explanatory message here", ne);
    }
    finally
    {
        ...
    }
    
        3
  •  0
  •   Nick    16 年前

    很好谢谢你的回答…使用obout库,因此也必须尝试并解决它们的异常处理功能。