If you keep on getting this even if your stored procedure parameter is DateTime2. The error is:
Error – SqlDateTime overflow. Must be between 1/1/1753 12:00:00 AM and 12/31/9999 11:59:59 PM
The solution is to pass an SqlParameter object with the DateTime2 SqlDBType specified. Before I used to pass parameters of System.Object type and let the CLR and SQL Server figure out the proper type between DateTime and DateTime2.
Please look at the code for before and after. Also focus on the DocumentDate, StartDate and EndDate parameters.
BEFORE – used parameters as System.Object
object retVal = SqlHelper.ExecuteScalar(
Transaction,
_commandInsert,
data.ItemID,
data.SequenceNumber,
data.ReferenceNumber,
data.DocumentDate,
data.StartDate,
data.EndDate,
data.Spoilage,
data.Remarks,
data.NotedByUserID,
data.QualityCheckUserID,
data.ReturnedByUserID,
data.CreatedBy,
data.UpdatedBy,
data.EstimatedQuantity,
data.ActualQuantity,
data.RawMaterial,
data.DirectLabor,
data.MachineOverhead,
data.ApproveMaterialsByUserID,
(byte)data.Status,
data.WIPItemID,
data.WIPReportID);
AFTER and the CORRECT way – passed parameters as SqlParameter, also specifying explicitly SqlDBType DateTime2
SqlParameter paramDocumentDate = new SqlParameter("@DocumentDate", SqlDbType.DateTime2); paramDocumentDate.Direction = ParameterDirection.Input;
SqlParameter paramStartDate = new SqlParameter("@StartDate", SqlDbType.DateTime2); paramStartDate.Direction = ParameterDirection.Input;
SqlParameter paramEndDate = new SqlParameter("@EndDate", SqlDbType.DateTime2); paramEndDate.Direction = ParameterDirection.Input;
paramDocumentDate.Value = data.DocumentDate;
paramStartDate.Value = data.StartDate;
paramEndDate.Value = data.EndDate;
if(WithTransaction)
{
SqlHelper.ExecuteNonQuery
(
Transaction,
CommandType.StoredProcedure,
_commandInsert,
paramID,
new SqlParameter("@ItemID", data.ItemID),
new SqlParameter("@SequenceNumber", data.SequenceNumber),
new SqlParameter("@ReferenceNumber", data.ReferenceNumber),
paramDocumentDate,
paramStartDate,
paramEndDate,
new SqlParameter("@Spoilage", data.Spoilage),
new SqlParameter("@Remarks", data.Remarks),
new SqlParameter("@NotedByUserID", data.NotedByUserID),
new SqlParameter("@QualityCheckUserID", data.QualityCheckUserID),
new SqlParameter("@ReturnedByUserID", data.ReturnedByUserID),
new SqlParameter("@CreatedBy", data.CreatedBy),
new SqlParameter("@UpdatedBy", data.UpdatedBy),
new SqlParameter("@EstimatedWeight", data.EstimatedWeight),
new SqlParameter("@ActualWeight", data.ActualWeight),
new SqlParameter("@ActualQuantity", data.ActualQuantity),
new SqlParameter("@RawMaterial", data.RawMaterial),
new SqlParameter("@DirectLabor", data.DirectLabor),
new SqlParameter("@ManufacturingOverhead", data.ManufacturingOverhead),
new SqlParameter("@ApproveMaterialsByUserID", data.ApproveMaterialsByUserID),
new SqlParameter("@Status", (byte)data.Status),
new SqlParameter("@WIPItemID", data.WIPItemID),
new SqlParameter("@WIPReportID", data.WIPReportID),
paramRV
);
}
HAPPY CODING!!!