以下GetEmpIDInBytes_INDIRECT
にリストされている方法では、次の例外が発生します。
タイプ 'System.String' のオブジェクトをタイプ 'System.Byte[]' にキャストできません。
次の行を使用すると、このエラーを回避できることがわかっています (つまり、byte[] キャストの代わりにエンコード)
result = Encoding.ASCII.GetBytes(odbcCommand.ExecuteScalar().ToString());
しかし、DB2 関数で使用されたエンコーディングが何であったかがわからないため、エンコーディングを使用できません。DB2 から byte[] として戻す必要があります。どうすれば入手できますか?
コード
string sqlGetEncryptedEmpID_INDIRECT = String.Format(SQLGetEncryptedID_INDIRECT, empIDClearText);
byte[] empIDData_INDIRECT = (byte[])GetEmpIDInBytes_INDIRECT(sqlGetEncryptedEmpID_INDIRECT);
public const string SQLGetEncryptedID_INDIRECT = @"SELECT SSS.id_encrypt ('E','0000000{0}')
AS ENCRYPT_ID FROM FFGLOBAL.ONE_ROW FETCH FIRST 1 ROW ONLY WITH UR;";
private byte[] GetEmpIDInBytes_INDIRECT(string sqlQuery)
{
byte[] result = null;
string db2connectionString = ConfigurationManager.ConnectionStrings[UIConstants.DB2ConnectionString].ConnectionString;
using (OdbcConnection odbcConnection = new OdbcConnection(db2connectionString))
{
using (OdbcCommand odbcCommand = new OdbcCommand(sqlQuery, odbcConnection))
{
odbcCommand.CommandType = System.Data.CommandType.Text;
odbcConnection.Open();
result = (byte[])odbcCommand.ExecuteScalar();
//result = Encoding.ASCII.GetBytes(odbcCommand.ExecuteScalar().ToString());
}
}
return result;
}
DB2 接続文字列
<add name="DB2ConnectionString_XA"
connectionString="Driver={IBM DB2 ODBC DRIVER};Database=MyDB;Hostname=DB2GWTST;
Protocol=TCPIP;Port=3700;Uid=remotxa;Pwd=xxxx;"/>