DateTime映射C#时出错

时间:2015-04-01 18:29:50

标签: c# sql sql-server datetime

我正在开发一个程序,该程序从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?

1 个答案:

答案 0 :(得分:2)

尝试将DOB添加到您的select子句......

const string sql = (@"SELECT FirstName, LastName, DOB
                FROM   Table
                WHERE  DOB = @dateOfBirth");