LINQ to SQL tárolt eljárás és null paraméter
- Erdélyi István -
|
|
2009. 09. 23. 10:41 |
Sziasztok!
Van egy tárolt eljárásom, aminek bizonyos paraméterei felvehetik a null értéket is.
Ez korábban szépen működött, de most, hogy áttérek LINQ-ra, nem fogadja el.
Felhúzom VS-ben a táblákat és a tárolt eljárást, majd megadva a paramétereket a következő hibát kapom futási időben: Az érték nem lehet NULL. Paraméter neve: value
(persze az adott paraméter valóban null és nem varchar(20) de ezt az sql szépen megeszi)
Az okát értem, de nem tudom hogy lehetne megoldani anélkül, hogy a tárolt eljárást módosítanom kéne. ?
Köszönöm,
István
|
|
|
|
Re: LINQ to SQL tárolt eljárás és null paraméter |
Tocsi (2009. 09. 23. 15:54)  |
| |
Amit írtál, abból nekem nem derül ki, hogy ki üzeni ezt - az sql vagy a linq.
Egyrészt a LinqToSql-nél az ilyen paraméterek legyenek nullozhatók (referencia típus vagy nullable). Aztán nézt meg Sql Profilerrel, hogy mit küld át (vagy a
datacontexen kapcsold be a logot egy streamre). Lehet, hogy a linq null-t kap, de az sqlnek már azt mondja hogy pl.: @parameter=default. Ha a tárolteljárásnál nincs megadva a paraméternek default értéke, akkor ez bizony elszáll.
Nem vagyok benne biztos, mintha a linq objecteknél a tulajdonságokon lehetne állítani default értéket. |
|
Re: LINQ to SQL tárolt eljárás és null paraméter |
Erdélyi István (2009. 09. 23. 21:41) |
| |
Igazad van, megnéztem rendesen. A LINQ küldi, mert az SQL-ig már el sem jut.
Három paramétert adnék át, ami bizonyos esetekben null értékeket vesznek fel. Ebből kettő string, ezzel nincs probléma, de van egy byte tömb is, ami okozza a problémát.
(System.Data.Linq.Binary..ctor(Byte[] value) )
Ezek egy fájl adatait tartalmazzák, a byte tömb pedig maga a file.
Végül ennek adtam egy üres értéket (new byte[] {} ) így már elfogadja a Linq.
Igy adatbázisban a mező értéke nem lesz null. Ezt vagy lekezelem a tárolt eljárásban, vagy nem. Igazából nem zavar.
Köszi a segítséget,
Üdv,
István |
Bejelentkezve hozzá is szólhat