我有一个过程,它接受两个日期(作为字符串)并返回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中的同一个数据库运行。
答案 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发回错误。