我有一个 C#.NET 应用程序,它必须能够更改 IBM System i (iSeries / AS400) 机器上的用户密码。我目前正在使用以下代码使用 IBM 专有的cwbx.dll执行此操作。
using cwbx;
public void ChangePassword(string system, string user, string currentPassword, string newPassword)
{
AS400System as400 = new AS400System();
as400.Define(system);
try
{
as400.ChangePassword(user, currentPassword, newPassword);
}
finally
{
as400.Disconnect(cwbcoServiceEnum.cwbcoServiceAll);
}
}
这工作得很好,但迫使我(和应用程序的所有用户)对cwbx.dll采取专有依赖。我想消除这种依赖。
有没有办法使用类似于 MS SQL Serveralter login
机制的 SQL 更改密码?
我知道我可以使用IBM.Data.DB2.iSeries .NET 数据提供程序来完成此操作,方法是使用Integrating DB2 Universal Universal Database for iSeries with for iSeries with Microsoft ADO .NET中的以下代码从 SQL 调用程序。
/// <summary>
/// Call a program directly on the iSeries with parameters
/// </summary>
public string CallPgm(string cmdtext)
{
string rc = " ";
// Construct a string which contains the call to QCMDEXC.
// Because QCMDEXC uses single quote characters, we must
// delimit single quote characters in the command text
// with an extra single quote.
string pgmParm = "CALL QSYS/QCMDEXC('"
+ cmdtext.Replace("'", "''")
+ "', "
+ cmdtext.Length.ToString("0000000000.00000")
+ ")";
// Create a command to execute the program or command.
iDB2Command cmd = new iDB2Command(pgmParm, _connection);
try
{
cmd.ExecuteNonQuery();
}
catch (iDB2Exception ex)
{
rc = ex.Message;
}
// Dispose the command since we're done with it.
cmd.Dispose();
// Return the success or failure of the call.
return rc;
}
这种技术的问题是我必须有一个现有的连接才能尝试更改密码。不幸的是,如果用户的密码已过期,他们将无法连接到数据库 ( iDB2CommErrorException
),因此无法更改他们的密码。
没有 cwbx.dll 有没有办法做到这一点?