0

数か月までに、Sql Server + C# を使用してアプリケーションを作成しようとしていました。このプログラムは一種の「ポケモン アジェンダ」であり、ユーザーはポケモンとその能力、タイプ、写真を追加および編集できるだけでなく、レコードの検索などの他の機能も利用できます。フォームとテーブル ダイアグラムの印刷画面を次に示します。

ここに画像の説明を入力

ここに画像の説明を入力

ここに私の問題があります:テーブル「Kanto」のID(AbilityIDとTypeID)のみを使用して、テーブル「Abilities」と「Types」の名前に直接アクセスしようとしていました。つまり、基本的には 1 つのテーブルだけを使用して、さまざまなテーブルから多くのデータにアクセスしようとしていました。ただし、これが正確に可能かどうかはわかりません。私は2つの可能性を考えました:

  1. Dataset リレーションを使用します (ただし、この解決策はまだ私にはあまり明確ではありません)。たとえば、次のようになります。

    ds.Relations.Add("ポケモンの能力", ds.Tables["能力"].Columns["能力ID"], ds.Tables["関東"].Columns["能力ID"]);

  2. Natural Joinを使用して、さらにテーブルを作成し、それらを使用して目的のデータを操作することができました。

注: 表の「タイプ」と「能力」には、必要な情報がすべて入力されているはずなので、フォームの実行中に編集されることはありません。

少し長いので全文は載せませんが、特定の部分だけ見たい方はお申し付けください。

4

3 に答える 3

1

これにより、統合されたビューが作成されます。SQL をテストしていないため、タイプミスがある可能性があります。これで始められるはずです。ビューと結合を理解する必要があります。

Create View Pokedata as
    Select name_,  t1.type as Type1, t2.type as Type2, ability
    From Kanto 
    inner Join Abilities on Kanto.abilityId = Abilities.abilityId
    inner join KantoType as kt1 on Kanto.pokémonid = kt1.pokémonid and kanto.typeid1 = kt1.typeid
    inner join on types as t1 on kt1.typeid = t1.typeid
    inner join KantoType as kt2 on Kanto.pokémonid = kt2.pokémonid and kanto.typeid2 = kt2.typeid
    inner join on types as t2 on kt2.typeid = t2.typeid
于 2012-10-09T19:46:30.290 に答える
1

具体的なアドバイスを与えるには少しあいまいすぎるため、これは実際にはあなたの質問に答えるつもりはありませんが、ADO.NET Entity Framework を確認することをお勧めします。Entity Framework を使用すると、他のテーブルのオブジェクトを含むクラスを作成できます。たとえば(ここでデータ構造を推測しています...)

public class Pokemon
{
int Id {get; set;}
ICollection<PokeAbility> Abilities {get; set;}
ICollection<PokeType> Types {get; set;}
}

エンティティ フレームワークでは、次のようにデータ コンテキスト クラスを定義します。

  public PokeContext : DbContext
    {
    DbSet<Pokemon> Kanto {get;set;}
    DbSet<PokeAbility> Abilies {get; set;}
    DbSet<PokeType> Types {get; set;}
    }

プログラムで Pokemon オブジェクトを取得したら、次のように他のテーブルからデータにアクセスできます。

var context = new PokeContext();
Pokemon instance = context.Kanto.First(); // Fetch first item from the Kanto table in the database
foreach (var ability in instance.Abilities)
  {
  Console.WriteLine(ability);  // Or whatever you want to do with it.
  }


Microsoft が Visual Studio 2012 でリリースしたストリーミング ビデオのいくつかをご覧
になることをお勧めします。ここのリソース:
http://msdn.microsoft.com/en-us/data/aa937723

于 2012-10-09T19:47:25.077 に答える
0

SQL Server ビューの使用を見てみましょう。

于 2012-10-09T19:35:09.090 に答える