Zoals mensen hier hebben gezegd, is het probleem dat je veldnamen niet als parameters kunt doorgeven.
De aanpak die u volgt, is om een paar redenen een slecht idee, ten eerste wanneer u een sql-opdracht op deze manier doorgeeft, moet de server deze telkens opnieuw compileren elke keer dat u die query uitvoert, dit belast de server extra en vertraagt de prestaties. Ten tweede is het een risico voor de veiligheid om uw geselecteerde uitspraken op deze manier door te geven, omdat het iedereen die het onderschept een blik op uw tabelstructuur geeft. Ten derde betekent het gebruik van selecte uitspraken als deze dat je de code die je niet aankruist opnieuw wilt gebruiken zonder een copy-paste.
Wat ik zou aanraden is om over te schakelen naar een opgeslagen procedure. je kunt nog steeds je parameters etc doorgeven, maar het zal je code verbeteren als het de SQL uit de C# haalt en alleen datgene achterlaat wat relevant is.
Als u WERKELIJK in veldnamen moet doorgeven voor gebruik binnen de geselecteerde instructie als deze, kunt u dit in SQL doen en een queryreeks opbouwen en deze vervolgens uitvoeren met sp_executesql.
In principe is wat je doet een zoekopdrachtsteken zoals
DECLARE @queryString VARCHAR(3000)
SET @queryString ='SELECT id, '[email protected]+' AS from, '[email protected]+' AS to FROM Dictionary WHERE +'@FROM+' LIKE %'[email protected]+'%'
gebruik dan gewoon sp_executesql om de @queryString uit te voeren
Mogelijk moet je de parameters als Varchar casten als je fouten krijgt tijdens het opbouwen van de querystring