OS400 DB2 SP的参数无效导致实体框架错误

时间:2013-10-04 17:04:09

标签: entity-framework entity-framework-4 db2 db2-400

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

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

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

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

再次:

CALL MY_DB2_PROCEDURE('09262013','09262013')

CALL MY_DB2_PROCEDURE('09272013','09272013')

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

1 个答案:

答案 0 :(得分:0)

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

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发回错误。