Для метода DateTime.Parse()
требуется строка даты в определенном формате. Пустая строка TextBox - это просто ""
, которая, как вы указали, не работает. Альтернативой может быть использование метода DateTime.TryParse()
, который не завершится ошибкой, если строка TextBox пуста. Результирующий объект времени DateTime будет установлен в значения по умолчанию, т.е. 01-Jan-0001
. Еще один аспект, который следует учитывать, - это как часто вы ожидаете, что ввод данных будет пустым / пустым.
Однако в этом случае значение всегда передается в sp.
DateTime dt=DateTime.Parse(TextBoxDate.Text) // fails if text is empty
Однако, если вы сначала инициализировали DateTime
объект
DateTime dt = new DateTime();
dt = DateTime.Parse(TextBoxDate.Text) // would fail if text is empty
DateTime.TryParse(TextBoxDate.Text, out dt) // would NOT fail if text is empty string
Используйте этот код позади:
DateTime dt;
DateTime.TryParse(TextBoxDate.Text, out dt);
SP может потребоваться изменить, если вы используете вышеуказанный метод, чтобы принять во внимание дату 01-JAN-0001, если вам нужно.
В качестве альтернативы, вы можете передать DateTime в виде строки в sp. Это потребует, чтобы вы приняли varchar вместо SQL DateTime и изменили sp соответственно.
На другой ноте взгляните на этот слегка переработанный SP
ALTER PROCEDURE [dbo].[SearchPostit] (
@message varchar(1000),
@writer varchar(50),
@mailto varchar(100),
@date Datetime ) AS
DECLARE @msg varchar(1002)
DECLARE @wrt varchar(52)
DECLARE @mlt varchar(102)
DECLARE @dte DateTime
IF (@message IS NULL)
BEGIN
SET @msg = null
END
ELSE
SET @msg = "%"+@message+"%"
-- similar for mailto, writer values, there is probaby a cleaner way to do this though
IF (@date is not null)
BEGIN
SET @ dte = CONVERT(Datetime, @date, 101)
END
SELECT P.Message AS Postit,
P.Mailto AS "Mailad till",
P.[Date] AS Datum ,
U.UserName AS Användare
FROM PostIt P
LEFT OUTER JOIN
[User] U ON P.UserId=U.UserId
WHERE
P.message LIKE COALESCE(@msg, P.Message) AND
P.Mailto LIKE COALESCE(@lt, P.Mailto) AND
P.Date LIKE @date AND
U.UserName LIKE COALESCE(@wrt, P.UserName)
GROUP BY P.Message, P.Mailto, P.[Date], U.UserName