2014-11-22 89 views
2

上發生了'System.NullReferenceException'類型的異常對不起,我是ASP.NET和英語的新手。我有這個捕麻煩,如果在登錄驗證密碼或用戶不正確,下面的錯誤發生時Try {} Catch(exception){throw}

型「System.NullReferenceException」發生在ProjetoPizzaria.dll的一個例外,但在用戶代碼中沒有處理

其他信息:參考對象:

翻譯:對象引用未設置爲對象的實例。

有人可以解釋我是什麼嗎?

public String ValidaLogin(String Login, String Senha) 
{ 
    String Retorno = ""; 

    try 
    { 
     SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;Integrated Security=SSPI;Initial Catalog=pizzariaDemo"); 
     conn.Open(); 

     Retorno = Retorno + " + Conexao Aberta1"; 

     string sql = "Select [FUNC_SENHA] from [dbo].[TCAD_FUNC]" + 
        " where [FUNC_LOGIN] = @usuario"; 

     string sql2 = "Select [FUNC_ID] from [dbo].[TCAD_FUNC]" + 
         " where [FUNC_LOGIN] = @usuario"; 

     Retorno = " + Criando Comando 1"; 

     SqlCommand cmd = new SqlCommand(sql, conn); 
     Retorno = " + Adicionando Parametros ao Comando 1"; 
     cmd.Parameters.Add(new SqlParameter("@usuario", Login)); 
     //executa o comando com os parametros que foram adicionados acima 
     Retorno = " + Executando Primeira Query"; 

     string senhaNoBanco = cmd.ExecuteScalar() as string; //Executa a consulta, e retorna a primeira coluna da primeira linha no conjunto de resultados retornados pela consulta. As colunas ou linhas adicionais são ignoradas. 

     cmd.ExecuteNonQuery(); 

     Retorno = " + Executado Primeira Query"; 
     //fecha a conexao 
     conn.Close(); 

     Retorno = " + Conexao Fechada1"; 

     //Retorna a chave primaria do Usuário Selecionado 
     SqlCommand comando2 = new SqlCommand(sql2, conn); 

     comando2.Parameters.Add(new SqlParameter("@usuario", Login)); 

     conn.Open(); 
     Retorno = " + Conexao Aberta2"; 
     string id_funcionario = comando2.ExecuteScalar().ToString(); //Executa a consulta, e retorna a primeira coluna da primeira linha no conjunto de resultados retornados pela consulta. As colunas ou linhas adicionais são ignoradas. 

     //comando2.ExecuteNonQuery(); 
     Retorno = " + Conexao Executda Segunda Query"; 
     conn.Close(); 

     Retorno = " + Conexao Fechada2"; 

     //Valida a conexão 
     if (string.IsNullOrEmpty(senhaNoBanco)) 
     { 
      //Quando ocorre algum erro como por exemplo Login invalido 
      Retorno += "Login invalido"; 
     } 
     else 
     { 
      if (senhaNoBanco == Senha) 
      { 
       //Conexão realizada com sucesso! 
       Retorno = "[Conexao Realizada]";//[" + id_funcionario + "]"; 
      } 
      else 
      { 
       //erro com a senha digitada 
       Retorno = "Senha Invalida"; 
      } 
     } 
    } 
    catch (Exception) 
    { 
     throw; 
    } 
    finally 
    { 
    } 

    return Retorno; 
} 
+0

除了拋出原始異常外,你沒有在你的'catch'子句中做任何事情。 try-catch旨在預測可能的異常,然後優雅地處理它。你預計空引用?發生時你想要發生什麼? – 2014-11-22 23:52:57

+0

我只是想在課程結束時返回false。 – 2014-11-23 00:01:54

+0

而完全忽略空引用?然後不要在catch子句中再次拋出異常。你會被建議趕上'NullReferenceException'而不是'Exception' – 2014-11-23 00:04:36

回答

0

我已經刪除了下面的部分,它的工作原理!

但我仍然不知道爲什麼。

 SqlCommand comando2 = new SqlCommand(sql2, conn);//Retorna a chave primaria do Usuário Selecionado 

     comando2.Parameters.Add(new SqlParameter("@usuario", Login)); 

     conn.Open(); 
     Retorno = " + Conexao Aberta2"; 
     string id_funcionario = comando2.ExecuteScalar().ToString(); //Executa a consulta, e retorna a primeira coluna da primeira linha no conjunto de resultados retornados pela consulta. As colunas ou linhas adicionais são ignoradas. 

     //comando2.ExecuteNonQuery(); 
     Retorno = " + Conexao Executda Segunda Query"; 
     conn.Close(); 
     Retorno = " + Conexao Fechada2";