![](/img/trans.png)
[英]system.invalidcastexception 'object cannot be cast from dbnull to other types.'
[英]System.InvalidCastException: 'Object cannot be cast from DBNull to other types.' in Conversion from Database to Object
当我尝试从我的数据库设置日期时间时遇到问题。 我有一个 DBnull tjek。 我已经将我的日期时间设为空标签。 不知道为什么。
public static List<ExportElements> GetExportElementsForCase(int caseNumber)
{
using (var dataAccess = new DbConnection<SqlConnection>())
{
DataTable dbExportElements = new DataTable();
dataAccess.ExecuteCommand<DataTable>(command =>
{
command.CommandType = CommandType.StoredProcedure;
command.CommandText = "GetElementsForEksport";
var caseNr = command.CreateParameter();
caseNr.ParameterName = "@caseNumberTolookUp";
caseNr.Value = caseNumber;
command.Parameters.Add(caseNr);
var reader = command.ExecuteReader();
//Create a new DataTable.
DataTable resultToReturn = new DataTable("exportElements");
//Load DataReader into the DataTable.
resultToReturn.Load(reader);
dbExportElements = resultToReturn;
return resultToReturn;
});
List<ExportElements> exportMarterials = new List<ExportElements>();
exportMarterials = (from DataRow dr in dbExportElements.Rows
select new ExportElements()
{
CaseNumber = Convert.ToInt32(dr["CaseNumber"]),
SubCaseNumber = Convert.ToInt32(dr["SubCaseNumber"]),
ElementNumber = dr["ElementNumber"].ToString(),
Side3To4 = Convert.ToDouble(dr["Side3To4"]),
Side2To5 = Convert.ToDouble(dr["Side2To5"]),
Side1To6 = Convert.ToDouble(dr["Side1To6"]),
Weight = Convert.ToDouble(dr["Weight"]),
Volume = Convert.ToDouble(dr["Volume"]),
ProductNumber = Convert.ToInt32(dr["ProductNumber"]),
DepartmentNumber = Convert.ToInt32(dr["DepartmentNumber"]),
TurnElement = Convert.ToBoolean(dr["TurnElement"]),
ErektionSeqence = Convert.ToInt32(dr["ErektionSeqence"]),
ID = Convert.ToInt32(dr["ID"]),
ReleasedDate = dr["ReleasedDate"] == DBNull.Value ? (DateTime?)null : Convert.ToDateTime(dr["ReleasedDate"]),
ElementBasicPart = dr["ElementBasicPart"].ToString(),
RevisionsLetter = dr["RevisionsLetter"].ToString(),
ElementStatus = Convert.ToInt32(dr["ElementStatus"]),
RevisionsText = dr["RevisionsText"].ToString(),
EnvironmentalClass = Convert.ToInt32(dr["EnvironmentalClass"]),
LedgeHeight1 = Convert.ToDouble(dr["LedgeHeight1"]),
LedgeHeight2 = Convert.ToDouble(dr["LedgeHeight2"]),
IsClosed = Convert.ToBoolean(dr["IsClosed"]),
RevitTemplate = dr["revitTemplate"].ToString(),
}).ToList();
return exportMarterials;
}
}
失败的是 releaseDate。
我正在从 DataRow 转换为 Model。
public class ExportElements
{
public int CaseNumber { get; set; }
public int SubCaseNumber { get; set; }
public string ElementNumber { get; set; }
public double Side3To4 { get; set; }
public double Side2To5 { get; set; }
public double Side1To6 { get; set; }
public double Weight { get; set; }
public double Volume { get; set; }
public int ProductNumber { get; set; }
public int DepartmentNumber { get; set; }
public bool TurnElement { get; set; }
public int ErektionSeqence { get; set; }
public int ID { get; set; }
public DateTime? ReleasedDate { get; set; }
public string ElementBasicPart { get; set; }
public string RevisionsLetter { get; set; }
public int ElementStatus { get; set; }
public string RevisionsText { get; set; }
public int EnvironmentalClass { get; set; }
public double LedgeHeight1 { get; set; }
public double LedgeHeight2 { get; set; }
public bool IsClosed { get; set; }
public string RevitTemplate { get; set; }
}
它适用于具有相同数据行到 DateTime 转换的其他转换
我发现了问题。 这不是日期时间吗? 但是我忘记检查也是 DBNull 女巫的“ErektionSeqence”。
我建议您使用从 LINQ 到 DataSet 的Field
方法,而不是在您实际上没有转换任何内容时使用所有这些Convert
调用。 它可以处理空值。 例如
NonNullableReferenceTypeProperty = row.Field<string>("Column1"),
NullableReferenceTypeProperty = row.Field<string>("Column2"),
NonNullableValueTypeProperty = row.Field<DateTime>("Column3"),
NullableValueTypeProperty = row.Field<DateTime?>("Column4"),
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.