Сначала я подумал, что вам нужно изменить хранимую процедуру.
Теперь, когда я снова прочитал вопрос, я понял, что сообщение об ошибке исходит от стороны 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
person
Zohar Peled
schedule
01.01.2018
@in_olusturmaTarihi
наDate
и удалить его преобразование в хранимой процедуре. - person Zohar Peled   schedule 01.01.2018