字符串未被识别为有效的 DateTime,存储过程为空参数
String was not recognized as a valid DateTime, stored procedure empty parameter
我在SQL服务器上写了一个存储过程。我有一个 smalldatetime
类型的参数。我想在使用 LINQ 运行 时将此参数发送为空白。当我想发送它时,我得到这个错误。
String was not recognized as a valid 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
起初,我以为您需要更改存储过程。
现在我再次阅读了这个问题,我意识到错误消息来自 c# 端,而不是来自存储过程(我仍然认为你应该改变)。
尝试将 null 或空字符串转换为 DateTime
将导致您的问题出现错误。为避免这种情况,您需要确保在将字符串发送到存储过程之前实际上可以将其转换为 DateTime
:
DateTime datetime;
DateTime? olusturulmaTarihi = null;
if(DateTime.TryParse(dataList.olusturulmaTarihi, out datetime))
{
olusturulmaTarihi = (DateTime?)datetime;
}
var query = ctx.onayListele(olusturulmaTarihi).ToList();
这样,如果字符串不能被解析为DateTime
,你将发送null
给存储过程,避免错误。
关于存储过程,我建议这样写:
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
我在SQL服务器上写了一个存储过程。我有一个 smalldatetime
类型的参数。我想在使用 LINQ 运行 时将此参数发送为空白。当我想发送它时,我得到这个错误。
String was not recognized as a valid 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
起初,我以为您需要更改存储过程。
现在我再次阅读了这个问题,我意识到错误消息来自 c# 端,而不是来自存储过程(我仍然认为你应该改变)。
尝试将 null 或空字符串转换为 DateTime
将导致您的问题出现错误。为避免这种情况,您需要确保在将字符串发送到存储过程之前实际上可以将其转换为 DateTime
:
DateTime datetime;
DateTime? olusturulmaTarihi = null;
if(DateTime.TryParse(dataList.olusturulmaTarihi, out datetime))
{
olusturulmaTarihi = (DateTime?)datetime;
}
var query = ctx.onayListele(olusturulmaTarihi).ToList();
这样,如果字符串不能被解析为DateTime
,你将发送null
给存储过程,避免错误。
关于存储过程,我建议这样写:
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