Bitové operace v dotazu na tabulku   otázka

VB.NET, ADO.NET, Databáze

Existuje možnost při dotazování na tabulku z DataSetu použít v dotazu bitové operace?

Aby bylo jasné, o co mi jde, přidám příklad:

Používám v aplikaci pro vyfiltrování odpovídajících řádků tabulky konstrukci :

Dim radky() As DataRow

radky = Me.DataSetOdbav.Tables("TblSchema").Select(dotaz)

Pokud je dotaz standardní, např.

Dim dotaz As String
dotaz = "DayOfWeek = 127"

vše funguje jak má.

Jenomže já bych potřeboval provádět bitovou kontrolu obsahu pole DayOfWeek, něco jako:

Dim dotaz As String
dotaz = "(DayOfWeek and 4 ) > 0"

což není nic jiného, než že bych potřeboval hodnotu v poli DayOfWeek bitově testovat určitou maskou (v tomto případě 4, neboli dvojkově 00000100).

jenomže v tomto případě mi to vyhodí chybu, že nelze AND použít na hodnoty Int32.

Můj dotaz tedy zní, zda operátor pro bitové operace v příkazu Select má jinou syntaxi, nebo vůbec neexistuje. A pokud neexistuje, neměl by někdo ideu, jak celý problém obejít?

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Díky skutečnosti, že v tomto konkrétním případě mám ve své masce pro testování nastaven vždy pouze jeden bit, prozatím jsem problém obešel dotazem:

Dim klic As Integer = 4

Dim filtr As String = "(DayOfWeek % " & (2 * klic).ToString & ") >= " & klic.ToString

což mi složí dotaz "(dayOfWeek % 8)>=4" , se kterým to funguje (tím modulem nejprve odříznu všechny vyšší bity, než je můj hledaný, a pak už jen zjistím, jestli je v tom zbytku obsažen i ten můj hledaný bit, nebo je zbytek menší.

Tím jsem sice vyhověl svým potřebám, ale stejně bych byl rád, pokud by některý z odborníků poradil, existuje-li na takovýto problém elegantnější řešení.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback