我在SQL Server中编写了一个存储过程。我有smalldatetime
类型的参数。我想用LINQ运行它时将此参数发送为空白。当我想发送它时,我收到了这个错误。
字符串未被识别为有效的DateTime。
如何将日期格式发送空白?
C#,LINQ;
var query = ctx.onayListele(Convert.ToDateTime(dataList.olusturulmaTarihi)).ToList();
SQL:
ALTER PROCEDURE [dbo].[onayListele]
@in_olusturmaTarihi smalldatetime = NULL
AS
BEGIN
SELECT
Onay.onayID, alep.olusturulmaTarihi, TalepTuru.talepTuruAdi,
TalepDurumu.talepDurumuAciklamasi
FROM
Onay
WHERE
(@var_olusturmaTarihi IS NULL OR
CONVERT(DATE, Talep.olusturulmaTarihi) = CONVERT(DATE, @var_olusturmaTarihi))
END
答案 0 :(得分:0)
起初,我认为您需要更改存储过程 现在我再次阅读了这个问题,我意识到错误信息来自c#端,而不是来自存储过程(我仍然认为你应该改变)。
尝试将空字符串或空字符串转换为DateTime
会导致问题出错。为避免这种情况,您需要确保在将字符串发送到存储过程之前,该字符串实际上可以转换为DateTime
:
DateTime datetime;
DateTime? olusturulmaTarihi = null;
if(DateTime.TryParse(dataList.olusturulmaTarihi, out datetime))
{
olusturulmaTarihi = (DateTime?)datetime;
}
var query = ctx.onayListele(olusturulmaTarihi).ToList();
这样,如果无法将字符串解析为null
,则会将DateTime
发送到存储过程,并避免错误。
关于存储过程,我建议改为编写它:
ALTER PROCEDURE [dbo].[onayListele]
@in_olusturmaTarihi date = NULL
AS
BEGIN
SELECT Onay.onayID,
alep.olusturulmaTarihi,
TalepTuru.talepTuruAdi,
TalepDurumu.talepDurumuAciklamasi
FROM Onay
WHERE @var_olusturmaTarihi IS NULL
OR CONVERT(date,Talep.olusturulmaTarihi) = @var_olusturmaTarihi
END
请注意,如果您在Talep.olusturulmaTarihi
上有索引,则此存储过程将无法使用它。在这种情况下,你最好使用这样的东西:
ALTER PROCEDURE [dbo].[onayListele]
@in_olusturmaTarihi date = NULL
AS
BEGIN
SELECT Onay.onayID,
alep.olusturulmaTarihi,
TalepTuru.talepTuruAdi,
TalepDurumu.talepDurumuAciklamasi
FROM Onay
WHERE @var_olusturmaTarihi IS NULL
OR
(
Talep.olusturulmaTarihi >= CAST(@var_olusturmaTarihi as datetime) -- or whatever the data type of the column is
AND Talep.olusturulmaTarihi < DATEADD(DAY, 1, CAST(@var_olusturmaTarihi as datetime)) -- or whatever the data type of the column is
)
END