質問を始める前に、私は C# ではなく C++ プログラマであることを言及する必要があるため、コード構文が間違っているように思われるかもしれません。私はアマチュアで、改善が必要です!;)
データアダプタ出力の結果の操作について質問があります (質問ではなくアイデアかもしれません)。これらの行を見てみましょう:
public DataSet CollectData()
{
DataSet result = new DataSet();
using (SqlConnection conn = new SqlConnection(connectionString))
using (SqlCommand cmd = new SqlCommand("dbo.StoredProc1", conn))
{
cmd.CommandType = CommandType.StoredProcedure;
IDataAdapter adapter = new SqlDataAdapter(cmd);
adapter.Fill(result);/// filling a dataset
return result;
}
}
ご覧のとおり、この関数はデータセットを埋めて返します。このオブジェクトを使用したい場所はどこでも、次のようにループする必要があります。
DataSet dataSet = DataObj.CollectData(); /// above function!
string token;
string lemma;
foreach (DataRow row in dataSet.Tables[0].Rows)
{
token = ((string)row["Token"]);
lemma = ((string)row["Lemma"]);
...
//// TODO: ex. write to file
}
しかし、この格納されたオブジェクトを示すクラスがあります。
このようなクラス:
public class Lexeme
{
private int tokenId = -1;
private string token;
private string lemma;
/// some get and set functions!
}
ご覧のとおり、このクラスはオブジェクトを保持します (データベース テーブル内に格納されたオブジェクトのラッパーのようなものです)。
それで、データセットの代わりにこのオブジェクト(ここではLexeme)のリストを返す方法があることを知りたいですか?私は効率的なメモリ使用量を持つものを意味します。私は膨大な量のデータを扱っているからです。
たとえば、次のようなものです。
public MYDATASET CollectData()
{
MYDATASET result = new MYDATASET ();
using (SqlConnection conn = new SqlConnection(connectionString))
using (SqlCommand cmd = new SqlCommand("dbo.StoredProc1", conn))
{
cmd.CommandType = CommandType.StoredProcedure;
IDataAdapter adapter = new SqlDataAdapter(cmd);
adapter.Fill(result);/// filling a dataset
return result;
}
}
データセットは継承できますか?