0

こんにちは、次の方法があります。

public bool IsTableExist(string tableName)
    {
        try
        {

            if (Utility.Utility.CreatedTable.Contains(tableName.ToLower()))
                return true;
            else
            {
                _dataAccess.openconnection();
                if (!_dataAccess.isTableExist(tableName))
                    return false;
                Utility.Utility.CreatedTable.Add(tableName.ToLower());
                return true;
            }
        }
        catch (Exception ex)
        {
            Logger.WriteLogFile("QueryBuilder", "IsTableExist", ex.StackTrace);
        }
        finally
        {
             _dataAccess.closeconnection();
        }
        return false;
    }

ここで、例外が発生しています:

Object reference not set to an instance of an object.
at DataAccessLayer.DataAccess.closeconnection()
at QueryBuilder.QueryBuilder.IsTableExist(String tableName)
at ObjectFilling.BusinessLogic.GetDataTypeForAllTags(DataTable tagDetails)

例外を解決する方法。データベースとの通信に使用されるopenconnection()メソッドとcloseconnection()メソッドがあります。closeconnection()メソッドが呼び出されたが呼び出さopenconnection()れなかった場合、finallyブロックで例外がスローされます。コードはelseブロックに到達します。else ブロックで bool 変数を使用して、finally ブロックに closeconnection を呼び出すタイミングを通知できますか。または、例外が発生しないようにコードを変更できる他の方法はありますか。この点で私を助けてください。

4

1 に答える 1

0
bool isOpen = false; 
try 
 {  
   _dataAccess.openconnection(); 
   isOpen = true; 
 } 
 finally 
 { 
  if (isOpen) 
  _dataAccess.closeconnection(); 
 }

これが実用的な解決策であることがわかりました。これ以上のアイデアは歓迎されます。この場合、接続が開かれたときにbool変数が設定されます。

于 2013-04-08T12:47:30.333 に答える