我在編程方面沒有太多的經驗,所以我不知道我的錯是什麼。 我正在爲一個網站進行動態搜索,您可以在其中搜索不同的值。InvalidCastException - 將空值傳遞給存儲過程
這是我的程序:
ALTER PROCEDURE [dbo].[Support_for_Search]
@ID int,
@Benutzername nvarchar(100),
@DatumEingang date,
@Eskalation date,
@Prio tinyint,
@namePrefix nvarchar(100)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
SELECT S.[ID]
,S.[Problembeschreibung]
,S.[Wunschtermin]
,S.[Projektkostenstelle]
,S.[Status]
,S.[BearbeiterID]
,S.[DatumEingang]
,S.[DatumAbschluss]
,S.[Priorität]
,S.[Eskalation]
,S.[Nutzerreaktion]
,S.[AntragstellerID]
,S.[Pcname]
,S.[Benutzername]
,S.[Bemerkungen]
,B.Vorname + ' ' + B.Nachname AS AntragstellerName
,BA.Vorname + ' ' + BA.Nachname AS BearbeiterName
FROM [dbiSupportsystem].[dbo].[Support] S
Left JOIN dbo.Benutzer B ON B.BenutzerNr = S.AntragstellerID
Left JOIN dbo.Benutzer BA ON BA.BenutzerNr = S.BearbeiterID
Where (@ID IS NULL OR ID = @ID)
AND
(@Benutzername IS NULL OR Benutzername LIKE '%' + @Benutzername + '%')
AND
(@DatumEingang IS NULL OR DatumEingang = @DatumEingang)
AND
(@Eskalation IS NULL OR Eskalation = @Eskalation)
AND
(@Prio IS NULL OR Priorität = @Prio)
AND
(@namePrefix IS NULL OR B.Nachname LIKE '%' + @namePrefix + '%')
END
用戶可以搜索什麼都不要,所以它應該可以通過空值。當我在sql管理工作室中測試過程時,即使只傳遞空值,它也能正常工作。
結果將綁定到GridView。 這是我所能背後:
using (DataClassesDataContext context = new DataClassesDataContext())
{
SearchDG.DataSource = context.Support_for_Search(null, null,null, null,null, null);
SearchDG.DataBind();
}
我傳遞了空值僅用於調試,但我得到的DataBind一個InvalidCastException。
有些幫助會很大。
我希望你明白一切,我的英語不是那麼好。
賈斯汀
編輯:
我測試過的另一種方式:
Int32? supportnummer;
int parseSupportnummer;
bool supportnummerIsInt = Int32.TryParse(txtSnummer.Text, out parseSupportnummer);
if (supportnummerIsInt)
{ supportnummer = parseSupportnummer; }
else
{ supportnummer = null; }
DateTime? datumEingang;
DateTime parseEingang;
bool eingangIsDate = DateTime.TryParse(txtDatumEingang.Value, out parseEingang);
if (eingangIsDate)
{ datumEingang = parseEingang; }
else
{ datumEingang = null; }
我做了爲我想通過每一個參數可空變量。 我檢查文本框是否爲空。如果是,那麼我將null賦值給變量。
在結束我打電話的步驟,使用這些參數:
SearchDG.DataSource = context.Support_for_Search(supportnummer, benutzername, datumEingang, datumEskalation, prio, userNachname);
但我已經得到了同樣的InvalidCastException的。
我沒有提到它,該帖子不會太複雜。
是否datumEskalation&PRIO也可爲空? – Dash 2014-10-22 11:39:20
是的,他們是,userNachname和benutzername也是。 – nitsuj1001 2014-10-22 12:10:21
C#代碼中存儲過程的簽名是什麼? – 2014-10-22 21:18:36