1

我正在使用 Enterprise Library 5.0,并且可以使 CreateSqlStringAccessor 与自定义参数映射器一起正常工作,但我得到:错误 [42884] [IBM][DB2] SQL0440N 没有名为“MySchema.MySPName”的授权例程,类型为“”找到了兼容的参数。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,但不确定为什么它适用于 SqlString 而不是 Sproc。我尝试将参数传递为“@PersonKey”和“PersonKey”,但都不起作用。谢谢。

4

0 回答 0