- 締切済み
データベースのDataRowの使い方について
環境: Windows7 MicrosftVisualStudio 2013 SQLServer 2014 言語 C# .Net 通常以下のようにしてDataRowを作って使用しますが、 DataSet ds = new DataSet(); DataTable dt = new DataTable("Table1"); dt.Columns.Add("商品番号"); dt.Columns.Add("商品名"); dt.Columns.Add("価格"); ds.Tables.Add(dt); DataRow datarow = ds.Tables["Table1"].NewRow(); データソースと同じ列を使用したいので データセット : MAINDataSet データテーブル : MASTERDataTable MAINDataSet.MASTERDataTable dtMaster = new MAINDataSet.MASTERDataTable(); として新規作成を行ったのですが、このままではレコード数が0で、上記の DataRow datarow = dataset.Tables["Table1"].NewRow(); にあたる処理 DataRow dr = MAINDataSet.MASTERDataTable.NewRow(); がわかりません。 現状では この1行の代わりに以下のようなことを毎回しなければ ならないのでしょうか? MAINDataSet.MASTERDataTable dt = new MAINDataSet.MASTERDataTable(); DataSet ds = new DataSet(); DataTable dt = new DataTable("Table1"); for(int inum = 0; inum < dt.Columns.Count; inum++) { dt.Columns.Add(dt.Columns[inum].ColumnName); } ds.Tables.Add(dt); DataRow datarow = ds.Tables["Table1"].NewRow();
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- shockatz
- ベストアンサー率80% (153/191)
#1です。 何か誤解なさってないですか? 説明したのは DataSet と TableAdapter による、「強い型づけ」DataTable を使うやり方です。 Entity Framework は関係ないです。 しかも、Visual Studio 2013なら、最新の Entity Framework も最初から動いてます。 インストールも不要。 そもそも、ASP.NET 4以上なら Entity Framework がデフォルトのDAOになってるはずです。 プロジェクトの bin フォルダに dll がすでに入ってないですか? 何かずいぶん昔のWebリソースをご覧になってるのと違います?
- shockatz
- ベストアンサー率80% (153/191)
Visual Studio 2013 / SQL Server 2014 をお使いなのに、データアクセス方法がVisual Studio 2003時代の方法論な理由がわかりませんが。。 本来、DataSet/DataTableというのは、データベースモデルを内部表現したもので、データの編集や変更をデータベースに自動反映させるためのもので、内部にそういう複雑な仕組みを持っています。 DBを更新するモデルなので、普通はサーバエクスプローラからDataSetペインにDragDropして自動生成してしまいます。 この概念を、VS2003のころはデータアダプタ、VS2005はテーブルアダプタというオブジェクトにまとめていました。 こういう、面倒なDataSet/DataTableを手動で作る必要はあるのですか? データ連結型のコントロールにDatSourceで連結するだけなら、DataTableなどは重いだけなのでほとんど使いません。 ていうか、最近はクラシックなDataAdapterは使わず、普通はEntityFrameworkを使います。。 どうしてもTableAdapterを使うのであれば、Datasetは不要、TableAdapterオブジェクトとDataTableオブジェクトはウィザードが生成済みなので、 var ta = new MASTERTableAdapter(); // ConnectionString内包 var dt = new MASTERDataTable(); var row = new MASTERDataTable.NewRow(); // MASTERDataTableRow型のオブジェクト=ウィザード生成済になる row.商品番号 = 1001; row.商品名 = "Visual Studio 2013 Ultimate Edition"; row.価格 = 168000; dt.Rows.Add(row); ta.Update(dt); で完了です。ウィザードで作ると、Columnも、その型も自動定義されます。気に入らなければWYSIWYG画面で変更できます。
お礼
EntityFramework については全く理解できていません。 なにやらインストールしなければ動作しないようですね。 また、後日勉強したいと思います。 現状(標準)可能な範囲でやってます。