我的应用程序有两个文本框,用户可以选择输入日期。如果没有日期,那么我想将null发送给sql。我有这个:
我解析DateTime
值的代码如下:
if (ScheduledTextBox.Text == "") //Schedule Date
{
sqlCmd.Parameters.Add("@ScheduledDT", SqlDbType.DateTime).Value = DBNull.Value;
}
else
{
sqlCmd.Parameters.AddWithValue("@ScheduledDT", SqlDbType.DateTime).Value =
DateTime.Parse(ScheduledTextBox.Text);
}
if (SourceDTTextbox.Text == "") //Source Date
{
sqlCmd.Parameters.Add("@SourceDT", SqlDbType.DateTime).Value = DBNull.Value;
}
else
{
sqlCmd.Parameters.Add("@SourceDT", SqlDbType.DateTime).Value =
DateTime.Parse(SourceDTTextbox.Text);
}
这会返回错误:
字符串未被识别为有效的DateTime
在我的数据库中,ScheduledDT
的类型为(datetime, null)
。
当我输入我认为有效的DateTime
时会发生这种情况,例如
2014-09-25 13:59:29
堆栈追踪:
A first chance exception of type 'System.FormatException' occurred in System.Data.dll
System.FormatException: Failed to convert parameter value from a String to a DateTime. ---> System.FormatException: String was not recognized as a valid DateTime.
at System.DateTimeParse.Parse(String s, DateTimeFormatInfo dtfi, DateTimeStyles styles)
at System.Convert.ToDateTime(String value, IFormatProvider provider)
at System.Convert.ChangeType(Object value, Type conversionType, IFormatProvider provider)
at System.Data.SqlClient.SqlParameter.CoerceValue(Object value, MetaType destinationType, Boolean& coercedToDataFeed, Boolean& typeChanged, Boolean allowStreaming)
--- End of inner exception stack trace ---
答案 0 :(得分:0)
我不是在我的电脑上测试这个,但看起来你的问题出在这一行:
sqlCmd.Parameters.AddWithValue("@ScheduledDT", SqlDbType.DateTime).Value =
DateTime.Parse(ScheduledTextBox.Text);
看起来应该更像这样:
DateTime myObject = DateTime.Parse(ScheduledTextBox.Text);
sqlCmd.Parameters.AddWithValue("@ScheduledDT", myObject);
看起来你传递的是对象类型,而不是实际的对象。
编辑: 您也可以使用Parameters.Add而不是Parameters.AddWithValue ...
sqlCmd.Parameters.Add("@ScheduledDT", SqlDbType.DateTime).Value =
DateTime.Parse(ScheduledTextBox.Text);