Giv*_*Pie 10 c# ado.net datetime parsing dbnull
我有两个DateTime对象,BirthDate和HireDate.它们被正确格式化为字符串,当我将它们传递给我的数据访问层时,需要将它们解析为DateTime对象.
DateTime hD = DateTime.Parse(hire);
DateTime bD = DateTime.Parse(birth);
//incase of a datestring being passed through
dateStringPassed = "7/2/1969";
Run Code Online (Sandbox Code Playgroud)
但有时,字符串hire和birth为空或空"",如果代码运行这样的,我是从解析空字符串得到出现FormatException错误.如何管理空解析并允许DateTime(如果为空或null)被接受为DBNull.Value?
我仍然无法管理用户没有通过DateTime字符串,然后解析崩溃我的代码.
我的出生日期参数如下,检查变量是否为null,然后使用DBNull.Value.
Hon*_*tan 13
该Parse方法无法处理空字符串,但您可以使用可为空的DateTime并执行以下操作:
DateTime? hD = String.IsNullOrEmpty(hire) ? (DateTime?)null : DateTime.Parse(hire)
Run Code Online (Sandbox Code Playgroud)
但更安全的是使用TryParse:
DateTime? hD = null;
DateTime.TryParse(hire, out hD);
Run Code Online (Sandbox Code Playgroud)
然后,为了存储此值,您可以测试hD.HasValue:
if(hD.HasValue) { /* use hD */ }
else { /* else use DBNull.Value */ }
Run Code Online (Sandbox Code Playgroud)
从C#7开始,你可以使用更短的语法来内联输出参数,你可以完全避免使用可空类型:
if (DateTime.TryParse(hire, out var hD)) { /* use hD */ }
else { /* use DBNull.Value */ }
Run Code Online (Sandbox Code Playgroud)
您需要使用可为空的日期时间 - 快捷语法将是DateTime?(注意?最后的)。
DateTime? hD = null;
if(!string.IsNullOrWhitespace(hire )) // string.IsNullOrEmpty if on .NET pre 4.0
{
hD = DateTime.Parse(hire);
}
Run Code Online (Sandbox Code Playgroud)
您可以测试一下hD.HasValue是否可以代替DbNull.Value。
| 归档时间: |
|
| 查看次数: |
27941 次 |
| 最近记录: |