1

OracleDataAdapter は、Windows XP の Fill メソッドでハングします。Windows 7 でのデバッグ中は正常に動作しますが、VS2008 は Windows XP でハングします。同じことがアプリのリリース バージョンにも当てはまります。使用されている sql クエリは何の関係もありません。単純なクエリを使用して関数をテストしましたが、すべて失敗しました。

以下は、初期コードを示すコード スニペットです。

public static string DBSelectString(string ssql)
{
  try
  {
    OracleDataAdapter da = new OracleDataAdapter();
    DataTable dt = new DataTable();
    da.SelectCommand = new OracleCommand(ssql, Connection);
    da.Fill(dt);
    return dt.Rows[0].ItemArray[0].ToString();
  }
  catch (Exception ex)
  {
    Utils.Log(ex.Message);
    return string.Empty;
  }
}

OracleDataReader を使用するとまだハングしますが、回避策を見つけることができました。

public static string DBSelectStringDR(string ssql)
{
  OracleDataReader reader = null;
  try
  {
    Connection.Open();
    OracleCommand command = new OracleCommand(ssql, Connection);
    reader = command.ExecuteReader();
    if (reader.HasRows)
    {
      //reader.Read();
      //return reader.GetValue(0).ToString(); <-------- normally hangs here

      try
      {
        //workaround: 
        //force exception, since Read has not been executed
        string test = reader.GetValue(0).ToString();
      }
      catch { }

      // then, everything works fine
      reader.Read();
      return reader.GetValue(0).ToString();
    }
    else
    {
      return string.Empty;
    }
  }
  catch (Exception ex)
  {
    Utils.Log(ex.Message);
    return string.Empty;
  }
  finally
  {
    if (reader != null) reader.Close();
    Connection.Close();
  }
}

何か案は ?

4

0 に答える 0