6

ステートメントSqlDataReaderから返されるものがあります。ExecuteDataReader

私が望むのは、グリッドにバインドする直前に、データ リーダーの列名を変更することだけです。

状況は次のとおりです。

  1. まず、グリッドの構造を構築します (構造は、過去にシステム内のストアド プロシージャの出力に基づいて入力されたデータベース内のテーブルにあります)
  2. データ リーダーを実行してストアド プロシージャを実行する
  3. データ リーダーをグリッドにバインドする

ここに問題があります。ストアド プロシージャ内の 1 つの列が大文字で、グリッド内の関連する列が小文字の場合、グリッドは塗りつぶされません。

そして、このアーキテクチャに基づくストアド プロシージャがたくさんあります。表示する行数が多いものもあります。そのため、パフォーマンスのためにデータリーダーを使用しています。

  1. ストアド プロシージャの列名を変更したくない (手間がかかりすぎる)
  2. データ リーダーの結果を別のデータ ホルダーにコピーしたくない (オーバーヘッドと低パフォーマンスのため)
  3. データ リーダーの列名を変更する方法の 1 つにすぎません

    sqlDataReader リーダー。reader.executedatareadet();

たとえば、データ リーダーが返された後、2 つの列 ( A,B) があります。

のようにグリッドにバインドする前に、列'A''a'(小文字に変換) に変更したいreader.GetName(i)

みたいなことができるようになりたい

reader.SetName(i)

しかし、データリーダーの列名を変更できないようです

4

3 に答える 3

1
  1. GridView で列名を変更できます
  2. 可能であれば、新しい列名でストアド プロシージャを変更します
于 2012-12-19T06:39:23.527 に答える
0

定義済みの列名を持つ DataTable に DbDataReader をロードしてみて、後でそのテーブルを tout アプリケーションのデータ ソースとして使用することができます。

于 2012-12-19T06:16:53.703 に答える
0

ここでの私の推奨事項は、UI とデータベース コードを分離することです。UI がデータ リーダーの影響を受けている場合、「UI がデータ リーダーと通信しているのはなぜですか?」という単純な疑問が生じます。これらの 2 つのことは、スタックの完全に反対側にあります。DALに、入力されたPOCO / DTOタイプ(またはおそらくビューモデルタイプ)の具体的なリストを返すようにすることで、それを抽象化します。

public List<Customer> GetCustomers({some filter etc}) {...}

次に、それにバインドします。

var customers = dal.GetCustomers(...);
...
someUI.DataSource = customers;

次に、Customer型は次のようなプロパティで適切に定義されます。

public class Customer {
    public int Id {get;set;}
    public string Name {get;set;}
    ...
}

DAL での実装の変更は、UI から完全に分離されました。

于 2012-12-19T07:35:37.430 に答える