Enterprise Library 5.0 を使用しており、カスタム パラメーター マッパーで CreateSqlStringAccessor を正常に動作させることができますが、次のメッセージが表示されます。互換性のある引数が見つかりました。SQLSTATE=42884
CreateSprocAccessor コード:
var database = EnterpriseLibraryContainer.Current.GetInstance<Database>("MyDataSource");
var storedProcAccessorCommand = database.CreateSprocAccessor<ObjectResult>("MySchema.MySPName", new PersonKeyParameterMapper());
var searchResult = storedProcAccessorCommand.Execute("123456");
var rowCount = searchResult.Count();
CreateSqlStringAccessor コード:
var database = EnterpriseLibraryContainer.Current.GetInstance<Database>("MyDataSource");
var command = database.CreateSqlStringAccessor<ObjectResult>("select FirstName, LastName, MiddleName from MySchema.MyTable where PersonKey = @PersonKey", new PersonKeyParameterMapper());
var searchResult = command.Execute("123456");
var rowCount = searchResult.Count();
オブジェクト結果:
public class ObjectResult
{
public string FirstName { get; set; }
public string MiddleName { get; set; }
public string LastName { get; set; }
}
PersonKeyParameterMapper コード:
public class PersonKeyParameterMapper : IParameterMapper
{
public void AssignParameters(DbCommand command, object[] parameterValues)
{
var personKey = command.CreateParameter();
personKey.ParameterName = "@PersonKey";
personKey.DbType = DbType.String;
personKey.Value = parameterValues[0];
command.Parameters.Add(personKey);
}
}
DB2 ストアド プロシージャ インターフェイス:
CREATE PROCEDURE MySchema.MySPName (
IN PersonKey VARCHAR(9)
)
DB2にはParameterMappersが必要であることを読みましたが、SprocではなくSqlStringで機能する理由がわかりません。パラメータを「@PersonKey」と「PersonKey」として渡そうとしましたが、どちらも機能しません。ありがとう。