gpt4 book ai didi

c# - 存储过程,日期时间

转载 作者:行者123 更新时间:2023-11-30 17:23:24 24 4
gpt4 key购买 nike

我在一个网站上有一个搜索表单,我必须在其中对数据库的所有或一列进行搜索。我有以下存储过程并且日期时间有问题。我该怎么做才能让它为空?

我在存储过程和代码隐藏 C# 中都遇到了这个问题。

希望你能帮助我!

ALTER PROCEDURE [dbo].[SearchPostit] ( 
@message varchar(1000)='',
@writer varchar(50)='',
@mailto varchar(100)='',
@date Datetime ) AS
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 '%'+@message+'%' AND P.Mailto LIKE '%'+@mailto+'%'
AND P.Date LIKE '%'+@date+'%' AND U.UserName LIKE '%'+@writer+'%'
GROUP BY P.Message, P.Mailto, P.[Date], U.UserName

这是我点击搜索按钮时的代码隐藏。但是如果文本框中没有日期,我会收到错误消息.... Postit p = new Postit();日期时间 dt=DateTime.Parse(TextBoxDate.Text); p.SearchPostit(TextBoxMessage.Text, TextBoxWriter.Text, TextBoxMailto.Text,dt);

最佳答案

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);

如果您使用上述方法考虑 01-JAN-0001 日期,则可能需要更改 sp。

或者,您可能希望将 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

关于c# - 存储过程,日期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2250310/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com