データリーダーからデータテーブルにデータを入力する 質問する

データリーダーからデータテーブルにデータを入力する 質問する

私は C# (MS VS2008) で基本的な作業を行っていますが、特定のコードよりも適切な設計について質問があります。

私はデータテーブルを作成し、データリーダー (SQL ストアド プロシージャに基づく) からデータテーブルをロードしようとしています。私が知りたいのは、データテーブルをロードする最も効率的な方法は while ステートメントを実行することなのか、それとももっと良い方法があるかということです。

私にとって唯一の欠点は、while ステートメントに追加したいフィールドを手動で入力する必要があることですが、SP のすべてのフィールドではなく選択したフィールドだけが必要なので、それを自動化する方法もわかりません。しかし、それは私にとっては大した問題ではありません。

私が行っていることの全体の下にコード スニペットを含めましたが、私にとってはコード自体は目立ったものではなく、私が尋ねているものでさえありません。私の方法論についてさらに疑問に思っているので、私の戦略が間違っている/非効率的である場合は、後でコードのヘルプをしつこく求めます。

var dtWriteoffUpload = new DataTable();
dtWriteoffUpload.Columns.Add("Unit");
dtWriteoffUpload.Columns.Add("Year");
dtWriteoffUpload.Columns.Add("Period");
dtWriteoffUpload.Columns.Add("Acct");
dtWriteoffUpload.Columns.Add("Descr");
dtWriteoffUpload.Columns.Add("DEFERRAL_TYPE");
dtWriteoffUpload.Columns.Add("NDC_Indicator");
dtWriteoffUpload.Columns.Add("Mgmt Cd");
dtWriteoffUpload.Columns.Add("Prod");
dtWriteoffUpload.Columns.Add("Node");
dtWriteoffUpload.Columns.Add("Curve_Family");
dtWriteoffUpload.Columns.Add("Sum Amount");
dtWriteoffUpload.Columns.Add("Base Curr");
dtWriteoffUpload.Columns.Add("Ledger");  

cmd = util.SqlConn.CreateCommand();
cmd.CommandTimeout = 1000;
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "proc_writeoff_data_details";
cmd.Parameters.Add("@whoAmI", SqlDbType.VarChar).Value = 

WindowsIdentity.GetCurrent().Name;

cmd.Parameters.Add("@parmEndDateKey", SqlDbType.VarChar).Value = myMostRecentActualDate;
cmd.Parameters.Add("@countrykeys", SqlDbType.VarChar).Value = myCountryKey;
cmd.Parameters.Add("@nodekeys", SqlDbType.VarChar).Value = "1,2";
break;


dr = cmd.ExecuteReader();
while (dr.Read())                    
{
    dtWriteoffUpload.Rows.Add(dr["country name"].ToString(), dr["country key"].ToString());
}

ベストアンサー1

を受け入れる メソッドDataTableを使用して、データ リーダーから直接 を読み込むことができます。Load()IDataReader

var dataReader = cmd.ExecuteReader();
var dataTable = new DataTable();
dataTable.Load(dataReader);

おすすめ記事