【发布时间】:2022-10-04 18:58:33
【问题描述】:
当我尝试从我的数据库设置 DateTime 时遇到问题。我有一个 DBnull tjek。我已经让我的 Datetime 可以为空。不知道为什么。
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 转换为的模型。
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; }
}
它适用于具有相同 Datarow 到 DateTime 转换的其他转换
我发现了问题。不是日期时间吗?但是我忘记检查的也是 DBNull 女巫的“ErektionSeqence”。
【问题讨论】:
-
@BagusTesa,这是不对的。 ADO.NET 使用
DBNull来表示数据库空值,而不是Nothing。 -
@jmcilhinney 哦,这是ado.net?我以为是entity-framework。我的错。没有标签,所以是的,我的错。
-
只需使用 Dapper ....
标签: c#