J'ai une classe avec le code suivantCast DateTime non valide?
public cCase(string pCaseNo, string pMode)
{
if (pMode == "new")
{
this._caseNo = Validate_CaseNo(pCaseNo);
}
if (pMode == "existing")
{
try
{
int intValidatedCaseNo = Validate_CaseNo(pCaseNo);
string sqlText = "SELECT * FROM tblCases WHERE CaseNo = @CaseNo;";
string strConnection = cConnectionString.BuildConnectionString();
SqlConnection linkToDB = new SqlConnection(strConnection);
linkToDB.Open();
SqlCommand sqlCom = new SqlCommand(sqlText, linkToDB);
sqlCom.Parameters.Add("@CaseNo", SqlDbType.Int);
sqlCom.Parameters["@CaseNo"].Value = intValidatedCaseNo;
SqlDataReader caseReader = sqlCom.ExecuteReader();
if (caseReader.HasRows)
while (caseReader.Read())
{
this._claimant = caseReader["Claimant"].ToString();
this._defendant = caseReader["Defendant"].ToString();
this._caseType = caseReader["CaseType"].ToString();
this._occupation = caseReader["Occupation"].ToString();
this._doa = (DateTime?)caseReader["DOA"];
this._dateClosed = (DateTime?)caseReader["DateClosed"];
this._dateSettled = (DateTime?)caseReader["DateSettled"];
this._dateInstructed = (DateTime?)caseReader["DateInstructed"];
this._status = caseReader["Status"].ToString();
this._instructionType = caseReader["InstructionType"].ToString();
this._feeEstimate = (decimal?)caseReader["FeeEstimate"];
this._amountClaimed = (decimal?)caseReader["AmountClaimed"];
this._amountSettled = (decimal?)caseReader["AmountSettled"];
this._caseManager = caseReader["CaseManager"].ToString();
}
caseReader.Close();
linkToDB.Close();
linkToDB.Dispose();
}
catch (Exception eX)
{
throw new Exception("Error finding case" + Environment.NewLine + eX.Message);
}
}
}
Cependant DateTime? les transtypages échouent avec un 'Cast Invalid'. J'ai vérifié la base de données SQL et le champ stocke des dates valides Donc je ne peux pas comprendre pourquoi, comme j'extraire des informations via le DataReader dans mon application, les champs datetime provoquent une distribution non valide.
Aidez-nous s'il vous plaît.
Quel type est contenu dans 'caseReader'? – ChrisF
Un de vos champs DateTime contient probablement un DBNull - autant que je sache, vous ne pouvez pas directement convertir DBNull en un type Nullable. Il y a cependant des extensions pour ce cas. – Alex
En plus des autres réponses concernant les valeurs nulles, vous dites que le champ stocke des dates valides, mais les stocke-t-il en utilisant un type de données approprié (par exemple 'datetime',' datetime2' ou 'date')? –