我有一个表示日期的文本框,我想将其解析为 DateTime ,但有时这个 textBox 可以是空字符串,我想发送 它以数据库为空或为空日期,我该怎么办?我正在使用Web服务,我认为以下内容将传递null:
txtCommentDateCreateNote.Text != string.Empty ? DateTime.Parse(txtCommentDateCreateNote.Text) : DateTime.MinValue,
但它返回
"SqlDateTime overflow. Must be between 1/1/1753 12:00:00 AM and 12/31/9999 11:59:59 PM."
下面的ASP.NET和c#代码:
protected void cmdSaveCreateNote_Click(object sender, EventArgs e)
{
ShortSaleInvestorReviewServiceClient _service = new ShortSaleInvestorReviewServiceClient();
int createApp;
createApp = _service.AddNote("10002",txtCommentDateCreateNote.Text != string.Empty ? DateTime.Parse(txtCommentDateCreateNote.Text) : DateTime.MinValue, 2, txtNoteCreateNote.Text); //Created by ID
}
答案 0 :(得分:3)
您试图传递DateTime.MinValue,1/1/0001 12:00:00 AM,这是一种常见技巧。但是,您发现SQL Server日期时间类型不喜欢1753之前的日期。
DateTime是一个结构,不能为null。但是,可以使用可以为空的版本。你可以这样声明......
DateTime? anullableDateTime;
如果.AddNote方法具有可为空的DateTime参数,则全部设置完毕。只需像这样设置一个空...
txtCommentDateCreateNote.Text != string.Empty ? DateTime.Parse(txtCommentDateCreateNote.Text) : null
如果没有,请确定您在UI中将其视为空的最短日期。 1/1/1900是最受欢迎的,并且这样做......
txtCommentDateCreateNote.Text != string.Empty ? DateTime.Parse(txtCommentDateCreateNote.Text) : new DateTime(1900,1,1)
检索此值时,只需设置textbox.Text = null。保存实际日期具有额外的优势,即不必处理数据库查询中的空值。
答案 1 :(得分:1)
试试这个
string.IsNullOrEmpty(txtCommentDateCreateNote.Text) ? (DateTime?)null : DateTime.Parse(txtCommentDateCreateNote.Text);