質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

3回答

10267閲覧

C# テーブルのクラス化

hamaa

総合スコア45

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

2クリップ

投稿2017/01/12 01:30

C# 初心者です。
DBでテーブルを良く扱うことがあると思うのですが

テーブルを素敵に管理できるクラス化+namespaceで整理したいです。

DB名をnamespace?にして
接続先(クラス名)
テーブル名(クラス名)
・日本語名項目 (フィールド名) (フィールドデータ)
・実際のDBの項目(フィールド名 英語など)(フィールドデータ)
・データ型(フィールドデータ)
・長さ(フィールドデータ)
等があると思うんですけど…

初心者なので発想力がこれくらいしかなく…
それよりもおすすめのクラス化とかありましたら教えてください。

おすすめのサイト等ございましたら教えてください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/01/12 01:56

何をどのように素敵に管理したいのか分かりません。全体のシナリオを含めてやりたいことを書いていただけませんか? また、そもそも DB とは何ですか? SQL Server? その他?
guest

回答3

0

Visual Studio にはその機能が用意されています。
最近のバージョンをお使いなら Entity Framework を試してみることをお勧めします。
作り方は簡単です。
プロジェクトエクスプローラーで作りたい場所を右クリックして、
[新しい項目の追加]-[Visual C#]-[データ]-[Ado.NET Entity Data Model]-[データベースから EF Designer]
こんな感じで、ウィザード通り進めれば作ってくれます。

投稿2017/01/12 01:49

hihijiji

総合スコア4150

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hamaa

2017/01/12 11:32

つくっては見ましたが…汗。使い方がいまいちです。 たとえば… テーブル名.フィールド名.型 みたいな使い方が出来るのですか…汗
hihijiji

2017/01/13 02:11

ウィザードで作ったものはほぼ確実に動きますから、試行錯誤したり調べたりしながら技術を習得してください。 動かないものを作って何故動かないか悩む時間は技術の習得にはあまり寄与しません。 それよりも、動くものを作ってから使って見て体感し、何故動いているのか調べて理解するのが近道です。
hsk

2017/01/17 05:27 編集

>動くものを作ってから使って見て体感し、何故動いているのか調べて理解するのが近道です。 横からですが、大変同感です。 hamaaさんの構想がおありかと思います。差し出がましくて恐縮ですが、それを一旦置いておいて、普及ないし標準的な技術に預けてみることで、新しい考え方を知ったり、逆にご自身の構想を補強できたり、思わぬ収穫が得られることも多いかと。 DBMS側はあくまでDBMSで管理すること(DBMSはデータ管理の親玉として独立させること)が、今後の機能追加や改修でプラスになると思われます。DBを管理するツールの制作であれば、話は違ってきますけれども。
hamaa

2017/01/17 08:53

hihijijiさんhskさん ありがとうございます。 Entity Frameworkというものがあるというものを知ったのも。今々です。汗 遠い道ですがもうちょっと勉強させて頂きます汗 >C#側からテーブル自体を作成させようとしておられますか? いえ、SQLserverのフィールド名が英語だったので、日本語の定数にいれて分かりやすく…汗 ついでに型なんかも扱いやすく…とC#歴 、数ヶ月なもので…汗 便利な機能があるとは知らなかったので、 テーブルclassとか世の中皆さんが便利にclass化しているのかなと…質問させていただきました。
guest

0

すでに回答がついていますが、こういうのはオレオレFrameworkにするより、EntityFrameworkのような有りものを使う工夫をしたほうがよいと思います
例えばEntityFrameworkではPOCOクラスで表せない制約情報なんかはアノテーション(System.ComponentModel.DataAnnotations)で処理しているようですよ

投稿2017/01/12 08:42

dojikko

総合スコア3939

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hamaa

2017/01/12 11:34

すいません。ずぶな素人でそんな機能があるのかもよくわからず… つくっては見ましたが…汗。使い方がいまいちです。 たとえば… テーブル名.フィールド名.型 みたいな使い方が出来るのですか…汗 それ以外は勉強できるサイトググってもう少し勉強してみます。
guest

0

汎用なオブジェクトにアクセサつけてるわけじゃないですから
テーブル名.フィールド名.型 の「型」なんてのは必要なくなるんです。
それでこそクラスにしてる意味があるってもんです。

Personテーブルがあったら
Personクラスがあり

C#

1Person 2{ 3 public string Name { get; set; } 4 public string Kana { get; set; } 5 public Sex Sex { get; set; } 6 public DateTime DateOfBirth { get; set; } 7}

Personクラスの型情報を見て、適切に保存したり、読みだしたりするわけです。

C#

1person.Name = "山田 花子"; 2person.Kana = "ヤマダ ハナコ"; 3// ... これをそのまま保存できるし、DBから読み出すこともできる

こういう技術をO/Rマッピングといいます。

EntityFrameworkは壮大過ぎるので難しいでしょう。
簡単なのはDapperです。

Dapperを導入した場合こうなります。

C#

1using (var connection = /*IDbConnection生成*/) 2{ 3 // クエリは今まで通り普通に文字列で書けば良い 4 var people = connection.Query<Person>("SELECT * FROM person"); 5 foreach (var person in people) 6 { 7 Console.WriteLine($"名前{person.Name} 誕生日:{person.DateOfBirth:yyyy/MM/dd}"); 8 } 9}

投稿2017/01/17 04:21

haru666

総合スコア1591

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hamaa

2017/01/31 03:13

EntityFrameworkは勉強中です。 Dapperというのがあるんですね。こちらも勉強してみます。
haru666

2017/01/31 04:23

Dapperがやってくれることを、SQL文無しで実現してくれるのがEntityFrameworkです 逆に言うとどんなクエリが生成されてるかコードからは分かりづらいので慣れが必要です
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問