0

几个月前,我试图使用 Sql Server + C# 来做一个应用程序。该程序是一种“神奇宝贝议程”,用户可以在其中添加和编辑神奇宝贝及其能力、类型和照片,以及搜索记录等其他功能。这是表单和表格图中的打印屏幕:

在此处输入图像描述

在此处输入图像描述

这是我的问题:我试图通过仅使用表“Kanto”中的 ID(AbilityID 和 TypeID)直接访问表“Abilities”和“Types”中的名称。换句话说,我试图从不同的表中访问许多数据,基本上, 只有一张表!但是,我不确定这是否完全可行。我想到了两种可能性:

  1. 使用数据集关系(虽然这个解决方案对我来说还不太清楚),例如:

    ds.Relations.Add("PokéAbility", ds.Tables["Abilities"].Columns["AbilityID"], ds.Tables["Kanto"].Columns["AbilityID"]);

  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。使用实体框架,您可以拥有包含来自其他表的对象的类。例如(我在这里猜你的数据结构......)

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.
  }

我建议你看看微软在 Visual Studio 2012 中发布的一些流媒体视频,例如,这个:http:
//msdn.microsoft.com/en-us/data/jj193542
有一大堆这里的资源:http:
//msdn.microsoft.com/en-us/data/aa937723

于 2012-10-09T19:47:25.077 回答
0

看看使用 SQL Server 视图。

于 2012-10-09T19:35:09.090 回答