gpt4 book ai didi

c# - 从数据库中转换空日期时间值?

转载 作者:太空宇宙 更新时间:2023-11-03 20:50:57 25 4
gpt4 key购买 nike

我正在执行一个简单的 SELECT 语句,并试图从 SQL Server 2012 表的 DateTime 列返回值。问题是,当我返回 NULL DateTime 值时,我不知道如何使用下面的代码来管理它。

dtTrainingEnd = (DateTime)reader["TrainingEnd"];

过去几天我一直在寻找答案,但找不到对我有帮助的东西。我找到了类似的帖子,但我仍然无法弄清楚它们如何帮助我。您能否解释一下我如何检查从数据库返回的日期时间值是否为 NULL?

SqlConnection connRead = new SqlConnection(connReadString);
SqlCommand comm = new SqlCommand();
SqlDataReader reader;
string sql;

DateTime dtTrainingEnd = DateTime.Now;
int iTrainingSwipeID = 123;

sql = "SELECT TrainingEnd FROM TrainingSwipe WHERE TrainingSwipeID = " + iTrainingSwipeID;

comm.CommandText = sql;
comm.CommandType = CommandType.Text;
comm.Connection = connRead;

connRead.Open();
reader = comm.ExecuteReader();

while (reader.Read())
{
dtTrainingEnd = (DateTime)reader["TrainingEnd"];
}
connRead.Close();

最佳答案

如果它可能是 null,您可以使用可为 null 的类型...在这种情况下,DateTime? 类型:

while (reader.Read())
{
dtTrainingEnd = ((DateTime?)reader["TrainingEnd"]) ?? some_default_date;
}
connRead.Close();

如果您愿意,也可以只测试 null:

while (reader.Read())
{
var endDate = reader["TrainingEnd"];
dtTrainingEnd = (endDate == null) ? some_default_date : (DateTime)endDate;
}
connRead.Close();

在上述两种情况下,如果数据库中的日期为 NULL,我假设您希望 dtTrainingEnd 包含 something,因此 some_default_date 是一些默认日期时间。

或者如果你想在值为 NULL 时单独保留 dtTrainingEnd,那么在这种情况下不要设置它:

while (reader.Read())
{
if ((reader["TrainingEnd"]) != null)
dtTrainingEnd = (DateTime)reader["TrainingEnd"];
}
connRead.Close();

*** 根据您连接到数据库的方式,您可能需要将 null 替换为 DBNull.Value

关于c# - 从数据库中转换空日期时间值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55339079/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com