2

動的クエリの解決策を Web で検索しています。

私はさまざまなソリューション (Linq to Sql、Dynamic Linq Expressions、Dynamic Query など) を見つけましたが、これらのソリューションにはすべて、データベースに関する何らかの事前知識 (コード内のモデルなど) が必要です。多分私が求めているのは深いところから外れているかもしれませんが、モデルなしでデータベースを動的にクエリする方法はありますか?

たとえば、データベースにCustomers次の列を持つテーブルがあるとします。

  • 顧客ID
  • 名前
  • 好きな色

SELECT Name FROM Customers WHERE @0 = @12 つのプレースホルダーが動的に設定されるクエリを として作成したいと考えています。結果のデータはモデル クラスに結び付けられないため、単純な文字列連結ではなく、ある種のフレームワークを使用してクエリを作成することをお勧めします。

System.Linq.Dynamic 名前空間は、この要求をほぼ満たしていますが、データベース モデルを使用しています。

これはばかげていると思いますが、私はただ興味がありました。

4

3 に答える 3

2

インサイトは Dapper に似ています: https://github.com/jonwagner/Insight.Database

于 2012-09-21T22:15:29.650 に答える
0

SQL クエリ パラメータは、リテラル値の代わりにのみ使用できます。テーブル名、列名、値のリスト、またはその他の SQL 構文にパラメーターを使用することはできません。これは、すべてのブランドのデータベースで標準的な SQL の動作です。

私が知る限り、列名を動的にすることはできません。このクエリを動的にすることを考えることができる唯一の方法は、列名が有効な名前であるかどうかをチェックする正規表現/ルールのようstring.Formatなものを使用することです。StringBuilderユーザーからの直接入力..それがあなたによって制御されている場合、SQL インジェクションが発生しないので安心できるので、心配する必要はありません。ユーザーが列名を提供する責任がある場合は、ユーザー入力をコード内の列名にマップしてください。

パラメータ自体をパラメータ化できるようになりました。そのために、SqlCommand クラスを使用して単純な古い ADO.NET に固執し、パラメータを動的にクエリに追加できます。これについて参照できるリソースは次のとおりです。 http://www.csharp-station.com/Tutorial/AdoDotNet/lesson06

これが役に立ったことを願っています..

于 2012-09-21T21:35:13.233 に答える
0

Dapper をご覧ください: http://code.google.com/p/dapper-dot-net/

于 2012-09-21T21:54:40.777 に答える