1

我有一个正在测试的程序,我想查看“幕后”的代码,特别是 OpenWithNewPassword方法(可能必须在页面上按 Ctrl+F)。是否有类似于Oracle 提供的来自 Microsoft的Reference Source的东西?我唯一能找到的是对方法是什么以及它的作用的定义。

using System;
using Oracle.DataAccess.Client; 
 
class PasswordExpirationSample
{
  static void Main()
  {
    OracleConnection con = new OracleConnection();
 
    try
    {
      con.ConnectionString = 
        "User Id=testexpire;Password=testexpire;Data Source=oracle";
      con.Open();
      Console.WriteLine("Connected to Oracle" + con.ServerVersion);
    }
    catch (OracleException ex)
    {
      Console.WriteLine(ex.Message);
 
      //check the error number 
      //ORA-28001 : the password has expired
      if (ex.Number == 28001)
      {
        Console.WriteLine("\nChanging password to panther");
        con.OpenWithNewPassword("panther");  // What call is this making with the database?
        Console.WriteLine("Connected with new password.");
      }
    }
    finally
    {
      // Close and Dispose OracleConnection object
      con.Close();
      con.Dispose();
      Console.WriteLine("Disconnected");
    }
  }
}
4

1 回答 1

0

由于评论中提到的原因,我只能猜测

con.OpenWithNewPassword("panther");  // What call is this making with the database?

它可能需要现有的连接,以及所有已解析的连接字符串和任何内部状态等,并且只更改密码,然后尝试再次打开连接。连接字符串包含很多东西(用户、密码、主机等),它们将在连接对象的整个生命周期内被解析和内部使用。可能有一个有效的用例,不再做所有这些,只需更改密码,然后再次连接到数据库。(我个人想不出一个,除非交易在连接循环中仍然存在;我只是用新密码建立一个新连接)

至少,在不违反许可协议的情况下,您可能可以使用调试器本地窗口来查看您与其内部变量的连接以存储密码(在非公共成员节点下,因为 OracleConnection 似乎没有一个公共密码属性,就像它做其他事情一样),获取它的哈希码或屏幕截图值等,然后调用 OpenWithNewPassword 并查看密码是否更改,但其他所有内容都与打开连接之前相同。这将是一个合理的指示它能做什么

于 2020-08-04T16:45:28.990 回答