leves

使一切更加简单!

导航

捕捉分析sql异常

using System.Data;
using System.Data.SqlClient;
using System.Diagnostics;

// Method exposed by a Data Access Layer (DAL) Component
public string GetProductName( int ProductID )
{
  SqlConnection conn 
= new SqlConnection(
        
"server=(local);Integrated Security=SSPI;database=northwind");
  
// Enclose all data access code within a try block
  try
  
{
    conn.Open();
    SqlCommand cmd 
= new SqlCommand("LookupProductName", conn );
    cmd.CommandType 
= CommandType.StoredProcedure;

    cmd.Parameters.Add(
"@ProductID", ProductID );
    SqlParameter paramPN 
= 
         cmd.Parameters.Add(
"@ProductName", SqlDbType.VarChar, 40 );
    paramPN.Direction 
= ParameterDirection.Output;

    cmd.ExecuteNonQuery();
    
// The finally code is executed before the method returns
    return paramPN.Value.ToString();  
  }

  
catch (SqlException sqlex)
  
{
    
// Handle data access exception condition
    
// Log specific exception details
    LogException(sqlex);
    
// Wrap the current exception in a more relevant
    
// outer exception and re-throw the new exception
    throw new DALException(
                  
"Unknown ProductID: " + ProductID.ToString(), sqlex );
  }

  
catch (Exception ex)
  
{
    
// Handle generic exception condition . . .
    throw ex;
  }

  
finally
  
{
    conn.Close(); 
// Ensures connection is closed
  }

}


// Helper routine that logs SqlException details to the 
// Application event log
private void LogException( SqlException sqlex )
{
  EventLog el 
= new EventLog();
  el.Source 
= "CustomAppLog";
  
string strMessage;
  strMessage 
= "Exception Number : " + sqlex.Number + 
               
"(" + sqlex.Message + ") has occurred";
  el.WriteEntry( strMessage );

  
foreach (SqlError sqle in sqlex.Errors)
  
{
    strMessage 
= "Message: " + sqle.Message +
                 
" Number: " + sqle.Number +
                 
" Procedure: " + sqle.Procedure +
                 
" Server: " + sqle.Server +
                 
" Source: " + sqle.Source +
                 
" State: " + sqle.State +
                 
" Severity: " + sqle.Class +
                 
" LineNumber: " + sqle.LineNumber;
    el.WriteEntry( strMessage );
  }

}



更多详情http://www.microsoft.com/china/msdn/Archives/adonet.asp

posted on 2005-08-26 13:24  leves  阅读(567)  评论(0编辑  收藏  举报