1

我有一个过程,它需要两个日期(作为字符串)并在 DB2400 上返回一个结果集。使用 Entity Framework (4.0),我看到具有不同参数的相同结果(当结果不同时[通过在 iSeries GUI 中运行该过程进行验证])。

MyEntities.MY_DB2_PROCEDURE('09262013','09262013').ToList();

MyEntities.MY_DB2_PROCEDURE('09272013','09272013').ToList();

使用第一个片段中设置的参数构建和运行;正确返回 18 条记录。使用新的参数集构建和运行;返回相同的结果集。

再次:

CALL MY_DB2_PROCEDURE('09262013','09262013')

CALL MY_DB2_PROCEDURE('09272013','09272013')

确实会产生不同的结果——在 iSeries GUI 中针对同一个数据库运行。

4

1 回答 1

0

该过程采用两个“日期字符串”作为参数。我正在使用这种扩展方法来转换我DateTime的 s,由于个位数的天/月而导致问题:

public static string ToDateParameter(this DateTime dt)
{
    //Format of procedure's parameters: MMDDYYYY
    return dt.Month.ToString() + dt.Day.ToString() + dt.Year.ToString();
}

更新到这个并且没有更多的错误:

public static string ToDateParameter(this DateTime dt)
{
    string day;
    string month;
    /*
     * Format of procedure's parameters: MMDDYYYY
     * Procedure expects string of 8 characters for dates; adding 0's in front of single-digit days & months.
     */
    day = dt.Day.ToString().Length == 1 ? "0" + dt.Day.ToString() : dt.Day.ToString();
    month = dt.Month.ToString().Length == 1 ? "0" + dt.Month.ToString() : dt.Month.ToString();

    return month + day + dt.Year.ToString();
}

最初,由于 EF 错误,我没有想到要检查我的参数,例如:

System.Data.EntityCommandExecutionException: The data reader is incompatible with the specified `Property`.  A member of the type, `Property`, does not have a corresponding column in the data reader with the same name.

更新:我没有写 SP 并且不同意这些参数。不过,我没想到会看到 EF 错误,而不是 DB2 将错误发回给我。

于 2013-10-04T21:42:51.383 回答