我有使用C#的asp.net表单,我正在使用Linq将用户信息像往常一样插入数据库。好。我也从用户那里获取出生日期,但是如果用户从ui跳过填写日期文本框,那么我得到像'01 / 01/0001'这样的日期,这肯定是数据库安全不允许的存储它。
所以我需要在我的代码中的某处检查它是null还是以这种(上面给出的)格式。如果它为null或格式为'01 / 01/0001'那么我究竟要做什么?我没有任何默认值 日期的价值。
那么,如果date为null(但不是强制性的),那么处理的标准方法是什么。请指导我。很多时候,我发现自己陷入陷阱,同时处理各种类型的null。
被修改 看看我做了什么似乎在这里工作。但我不认为这是标准方式:
DateTime? otxtDOB = new DateTime();
if (!string.IsNullOrEmpty(DOB))
{
if (Convert.ToDateTime(DOB) != DateTime.MinValue)
{
otxtDateOfPurchese = Convert.ToDateTime(Convert.ToDateTime(DOB).ToString("dd-MMM-yyyy"));
}
else
{
otxtDOB = null;
}
}
请确认我这是正确的方法吗?
答案 0 :(得分:11)
如果用户尚未设置日期属性Nullable
(即“DateTime?
”),则应该允许它实际为空。 (并且如果您的数据库列将允许空值,则可以将其存储为数据库中的null)
否则它会默认为DateTime.MinValue
,这就是你在这里看到的。在添加到数据库时,您必须对DateTime.MinValue
进行明确的测试。
答案 1 :(得分:0)
DateTime是一个值类型(如数字),因此您无法为其指定空值。 Mane人使用DateTime.MinValue和DateTime.MaxValue代替,但我更喜欢使用可空类型:
DateTime? nullableDate;
dateSample.Value = null;
答案 2 :(得分:0)
您可以选择使用Nullable<DateTime>
(别名DateTime?
)。这使您能够在整个应用程序中将日期处理为null。
但是,我个人并不认为这是错误的,并且更喜欢第二条路径:您可以使用DateTime.MinValue
(即01/01/0001)作为应用程序中有意义的常量并检查DateTime。数据访问层中的MinValue。
如果数据库是SQL Server且字段的类型为smalldatetime,则会溢出并在您尝试保存DateTime.MinValue
时抛出异常。但是,Null可能存储在任何类型的数据库中。
这是你可以将字符串解析为可空类型的方法:
private delegate bool TryParseDelegate<T>(string s, out T t);
private static T? TryParseNullable<T>(string s, TryParseDelegate<T> tryParse) where T : struct
{
if (string.IsNullOrEmpty(s))
return null;
T t;
if(tryParse(s, out t))
return t;
return null;
}
用法:
var nullableDateTime = TryParseNullable<DateTime>("01/01/0001", DateTime.TryParse);
答案 3 :(得分:0)
你可以做一些像这样的事情C#有一些你可以使用的可空类型的功能 这样它会为你节省一些代码,它也会更加健壮。
Public int InsertData(int? ouId)
{
chkValue = ouId.HasValue ? ouId.Value : 0;
}
答案 4 :(得分:0)
使用
DateTime dt;
if(DateTime.TryParse(DatetImeValue.Tostring(),dt)) // datetimevalue is your db value
{
datetimeproperty = dt; // in your class declare it as DateTime? datetimeproperty
}
else
{
datetimeproperty = null;
}
显示检查为null时,如果其null设置为空。
<强> [更新] 强>
做一件事,保持属性可以为空。在您的数据库中。设置字段以允许null并在参数user @DateTimeParam = null。
或快速解决方法使数据库字段和参数VARCHAR安装在日期时间,参数通过DATETIMEVALUE.TOSHORTDATESTRING()并检查用户是否跳过 在参数中输入STRING.EMPTY。以这种方式,您将很容易显示日期和时间。如果你不需要,你不需要在时间部分丢弃或擦掉
答案 5 :(得分:0)
obj.BirthDate = Convert.ToDateTime(string.IsNullOrEmpty(txtBirthDate.Text.ToString()) ? System.Data.SqlTypes.SqlDateTime.MinValue.Value : Convert.ToDateTime(txtBirthDate.Text.ToString()));
答案 6 :(得分:-2)
您可以在传递到数据库时使用它。
object datetimeObj = null;
if (datetimefromUI == DateTime.MinValue) // This is put in the DateTime object by default
datetimeObj = DBNull.Value;
else
datetimeObj = datetimefromUI;
// Post datetimeObj to parameter in database...