1

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」として渡そうとしましたが、どちらも機能しません。ありがとう。

4

0 に答える 0