人々がここで言ったように、問題はあなたがパラメータとしてフィールド名を渡すことができないということです。
あなたが取っているアプローチは、いくつかの理由から悪い考えです。まず、このような方法でsqlコマンドを渡すと、そのクエリを実行するたびにサーバを再コンパイルしなければならないため、サーバに負荷がかかり、パフォーマンスが低下します。第二に、セキュリティを脅かすリスクは、選択したステートメントを表の構造を傍受した人に通知するためです。第3に、このようなselect文を使用すると、コピー貼り付けをしないでコードを再利用したい場合に便利です。
私は、ストアドプロシージャに切り替えることをお勧めします。あなたは引き続きパラメータなどを渡すことができますが、SQLをC#から取り出して関連するものだけを残すので、コードが改善されます。
このようなselect文で使用するフィールド名を本当に渡す必要がある場合は、SQLでこれを行い、クエリ文字列を作成してからsp_executesqlを使用して実行します。
基本的には、次のようなクエリ文字列を宣言することです
DECLARE @queryString VARCHAR(3000)
SET @queryString ='SELECT id, '[email protected]+' AS from, '[email protected]+' AS to FROM Dictionary WHERE +'@FROM+' LIKE %'[email protected]+'%'
@queryStringを実行するためにsp_executesqlを使用するだけです
クエリ文字列を構築している間にエラーが発生した場合は、Varcharとしてパラメータをキャストする必要があるかもしれません