繁体   English   中英

从SQLDataReader使用多个结果集

[英]Using multiple result sets from a SQLDataReader

我目前正在研究一个学校项目,希望有人可以指出以下内容的在线教程。 这是一项家庭作业,所以我不是在找别人给我答案,而是想找到与我所打算的解决方案相似的教程。 我一直在使用SQLDataReader和Linq进行搜索,但找不到与我追求的解决方案类似的解决方案。

我正在将C#客户端项目连接到SQL数据库。 该数据库包含一个用于狗的表和一个用于BreedOfDog的表,以说明狗可能属于混合犬种这一事实。 BreedOfDog具有两个值DogId和BreedId,它们将Dog表连接到Breed表。 在我的客户端应用程序上,有一个容器,用于显示狗的信息。 还有一个Dog类,其中包含品种对象列表。 品种对象列表将用于用狗的品种填充列表框。 这是我打算用伪代码执行的操作:

创建一个允许多个结果集的SQL查询。 我将使用SQL数据库中的存储过程

打开与SQL数据库的连接

执行第一个查询,将获得Dog对象的列表

执行第二个查询。 此查询将在第一个查询中拉出每条狗的DogId,在BreedOfDog上执行查询,创建Breed对象的列表并将其添加到Dog对象。 将对“狗”列表中的每个狗执行此操作。

紧密连接

您可以指出我的观点吗?

    List<DogClass> Dogs = new List<DogClass>();
    string SQL = "select DogId from Dog";
    SqlCommand Command = new SqlCommand(SQL, Con);
    SqlDataReader Reader = Command.ExecuteReader();
    while (Reader.Read())
    {
        DogClass Dog = new DogClass(Reader, Con);
        Dogs.Add(Dog);
    }
    Reader.Close();

using System;
using System.Collections.Generic;
using System.Data.SqlClient;

class DogClass
{
    string DogId;
    List<BreedClass> Breeds = new List<BreedClass>();

    internal DogClass(SqlDataReader Reader, SqlConnection Con)
    {
        DogId = Convert.ToString(Reader.GetValue(Reader.GetOrdinal("DogId"))).Trim();
        string SQL = "select BreedOfDog from Breeds where DogID = '" + DogId + "'";
        SqlCommand Command = new SqlCommand(SQL, Con);
        SqlDataReader Reader2 = Command.ExecuteReader();
        while (Reader2.Read())
        {
            BreedClass Breed = new BreedClass(Reader);
            Breeds.Add(Breed);
        }
        Reader2.Close();
    }
}

using System;
using System.Data.SqlClient;

class BreedClass
{
    internal string Breed;

    internal BreedClass(SqlDataReader Reader)
    {
        Breed = Convert.ToString(Reader.GetValue(Reader.GetOrdinal("BreedOfDog"))).Trim();
    }
}

我记得在程序员学校(学院)也遇到过同样的问题! 您会喜欢linq to sql的。 您需要做的是:

  1. 右键单击要放置linq数据类的文件夹。 单击添加新项-> LINQ to SQL类。
  2. 然后,打开服务器资源管理器并将表拖放到LINQ to SQL类设计器上。
  3. 然后,进入要使用该类的.cs页面,并为数据库类实例化一个新对象,例如DataClasses1DataContext db = new DataClasses1DataContext();
  4. 然后,您可以通过LINQ to SQL语句操作数据库,就像IQueryable<BREED> breeds = db.BREEDs.Take(50);一样简单IQueryable<BREED> breeds = db.BREEDs.Take(50); 有关如何使用LINQ读取/写入/删除/等的信息,请参阅本文。 http://msdn.microsoft.com/en-us/library/bb882643.aspx

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM