我正在开发一个程序,该程序从SQLserver实例中提取数据并在C#控制台应用程序中对其进行操作。我无法正确映射dateTime值。我正在使用Enterprise Library 5。 这是我得到的错误
在正在评估的IDataRecord上找不到列DOB。这可能表示访问者是使用错误的映射创建的
这是param mapper接口
public class MyParameterMapper : IParameterMapper
{
public void AssignParameters(DbCommand command, object[] parameterValues)
{
var parameter = command.CreateParameter();
parameter.ParameterName = "@dateOfBirth";
parameter.Value = parameterValues[0];
parameter.DbType = DbType.DateTime;
command.Parameters.Add(parameter);
}
}
在对具有映射的对象类型进行建模的类中具有此声明public DateTime? DateOfBirth {get; set;}
。我实际实现接口的类已经像这样使用DoB:var matches = _objectAdapter.GetList(person.DateOfBirth.Value).ToList();
传递查询的实际方法如下:
public IEnumerable<Person> GetList(DateTime dateOfBirth)
{
const string sql = (@"SELECT FirstName, LastName
FROM Table
WHERE DOB = @dateOfBirth");
var accessor = new SqlStringAccessor<Person>(_db, sql, new MyParameterMapper(),_myRowMapper);
var people = accessor.Execute(dateOfBirth);
return people;
}
实际映射如下:
private IRowMapper<Person> _myRowMapper = MapBuilder<Person>.MapAllProperties()
.Map(x => x.FirstName).ToColumn("FirstName")
.Map(x => x.LastName).ToColumn("LastName")
.Map(x => x.DateOfBirth).ToColumn("DOB")
.Build();
列名是正确的,所以我不确定这个错误是否与界面有关,或者是否有一些显式的投射我必须传递给DateOfBirth?
答案 0 :(得分:2)
尝试将DOB添加到您的select子句......
const string sql = (@"SELECT FirstName, LastName, DOB
FROM Table
WHERE DOB = @dateOfBirth");