我正在使用 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”,但都不起作用。谢谢。