0

リレーションを使用して複数のテーブルからデータグリッド内のデータを選択するコードを C# で作成しています...ここではClient&Item_Configurationを親テーブルとして、およびItem_Orderからの外部キーを持つ子テーブルとして、からデータを取得したいだけです3 つのテーブルすべてをデータグリッドに表示するClientItem_Configuration

私のストアドプロシージャは次のとおりです。

ALTER PROC [dbo].[Full_SP]
    @clientName varchar(50) = null,
    @itemName varchar(50) = null,
    @clientId_FK varchar(50) = null,
    @operation int
AS
BEGIN
    SET NOCOUNT ON;

    if @operation = 2
    BEGIN
        SELECT 
            Client.clintName, Item_Configuration.itemName,
            Item_Order.orderId, Item_Order.orderDate, Item_Order.quantity,
            Item_Order.status, Item_Order.totalPrice 
        FROM
            Item_Order 
        INNER JOIN 
            Client ON Item_Order.clintId_FK = Client.clientId
        JOIN
            Item_Configuration ON Item_Order.itemId_FK = Item_Configuration.itemId
     END
END

そして、データグリッドへの検索の私の機能はC#にあります。

private void btnSrchFull_Click(object sender, EventArgs e)
{
        SqlConnection conn1 = new SqlConnection();

        try
        {
            conn1.ConnectionString = "server=.\\ms2k5;database=Info_Connect;Trusted_Connection=true";
            conn1.Open();

            SqlCommand selectFull = new SqlCommand("Full_SP", conn1);
            selectFull.CommandType = CommandType.StoredProcedure;

            selectFull.Parameters.Add("@operation", SqlDbType.VarChar);
            selectFull.Parameters["@operation"].Value = 2;

            SqlDataReader myReader = selectFull.ExecuteReader();

            List<FullFill> list = new List<FullFill>();

            while (myReader.Read())
            {
                if (myReader.HasRows)
                {
                    FullFill fullfill = new FullFill();
                    fullfill = MapFullfill(myReader, fullfill);
                    list.Add(fullfill);
                }
            }

            myReader.NextResult();

            foreach (FullFill ffll in list)
            {
                if (myReader.Read() && myReader.HasRows)
                {
                       MapClient(myReader, ffll);
                }
            }

            myReader.NextResult();

            foreach (FullFill ffll1 in list)
            {
                if (myReader.Read() && myReader.HasRows)
                {
                    MapItem(myReader, ffll1);
                }
            }

            dataGridView1.DataSource = list;
            double totPrice = 0;

            for (int i = 0; i < dataGridView1.RowCount; i++)
            {
                    totPrice = totPrice +
                    Convert.ToDouble(dataGridView1.Rows[i].Cells[5].Value);
                    totCost.Text = totPrice.ToString();
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.StackTrace + MessageBoxIcon.Error);
        }
        finally
        {
            if (conn1.State != ConnectionState.Closed)
            {
                conn1.Close();
            }
        }
    }

    private FullFill MapItem(SqlDataReader myReader, FullFill itemName)
    {
        itemName.ItemName =myReader["itemName"].ToString();
        return itemName;
    }

    private FullFill MapClient(SqlDataReader myReader, FullFill clientName)
    {
        clientName.ClientName = myReader["clientName"].ToString();
        return clientName;
    }

    private FullFill MapFullfill(SqlDataReader myReader, FullFill fullfill)
    {
        fullfill.OrderNo = myReader["orderId"].ToString();

        fullfill.OrderDate = Convert.ToDateTime(myReader["orderDate"]);
        fullfill.Quantity = Convert.ToInt32(myReader["quantity"]);
        fullfill.Status = myReader["status"].ToString();
        fullfill.TotalPrice = Convert.ToDouble(myReader["totalPrice"]);

        return fullfill;
    }

プロパティのクラスを作成しました。

class FullFill
{
    public string orderNo;
    public string clientName;
    public DateTime orderDate;
    public string itemName;
    public int quantity;
    public double totCost;
    public string status;

    public string OrderNo { get { return orderNo; } set { orderNo = value; } }
    public string ClientName { get { return clientName; } set { clientName = value; } }
    public DateTime OrderDate { get { return orderDate; } set { orderDate = value; } }
    public string ItemName { get { return itemName; } set { itemName = value; } }
    public int Quantity { get { return quantity; } set { quantity = value; } }
    public double TotalPrice { get { return totCost; } set { totCost = value; } }
    public string Status { get { return status; } set { status = value; } }
    }
 }

問題は、子テーブル (Item_Order) からのみデータを見つけることができることです。親テーブルからデータを取得していません。

4

0 に答える 0