C# 如何用特定数据的所有可能实例填充datatable?

C# 如何用特定数据的所有可能实例填充datatable?,c#,sql,.net,sql-server,C#,Sql,.net,Sql Server,我在编写SQL Server存储过程时遇到一些问题。我有三个表,产品,客户信息和客户订单 Products有列ProductID、Product、Price、Description CustomerInfo有列customerid、姓名、地址、Zipcode CustomerOrders具有类似于CustomerID或TransactionID、ProductID、Quantity等列 现在,我正在尝试编写一个存储过程,将客户曾经购买的所有产品导入到数据表中。我有可以用作参数的客户名称 需要

我在编写SQL Server存储过程时遇到一些问题。我有三个表,
产品
客户信息
客户订单

  • Products
    有列
    ProductID、Product、Price、Description
  • CustomerInfo
    有列
    customerid、姓名、地址、Zipcode
  • CustomerOrders
    具有类似于
    CustomerID或TransactionID、ProductID、Quantity等列
现在,我正在尝试编写一个存储过程,将客户曾经购买的所有产品导入到数据表中。我有可以用作参数的客户名称

需要注意的几件事:每次客户购买东西时,都会生成一个新的
CustomerID
TransactionID
,它们都是相同的。
CustomerName
是多个订单中唯一的常量

DECLARE @TransactionID int;

SET @TransactionID = @Id;

SELECT 
    P.Product, P.Price, 
    CP.TotalProducts as ProductQuantity 
FROM 
    Products P
INNER JOIN 
    CustomerProducts CP ON CP.ProductID = P.ProductID
WHERE
    CP.CustomerID = @TransactionID

目前,我得到了客户上次购物时购买的产品。然而,我想把他买过的所有产品放在一张桌子上。如果有人能帮我,我会非常感激

如果我理解正确,您需要对存储过程中的3个表进行联接,以提取客户购买的产品的所有详细信息

因此,用于此目的的存储过程可以如下所示-

CREATE PROC [dbo].[GetCustomerProductsById]  
( 
@CustId int=0
AS
BEGIN
SELECT P.ProductId ,P.Product,P.Price,P.Description,C.CustomerID,C.Name,C.Address FROM Products P
Inner Join CustomerOrders CO ON P.ProductId= CO.ProductID
Inner Join CustomerInfo C ON C.CustomerID = CO.CustomerID
WHERE C.CustomerID = @CustId
ORDER BY C.Name
END
现在,一旦这给了我们预期的结果,那么在c代码中,您可以像下面那样调用这个存储过程,并提取一个结果数据表

SqlDataAdapter SqlAda;
DataSet ds; 
using (SqlConnection Sqlcon = new SqlConnection(strCon))    
{    
using (SqlCommand cmd = new SqlCommand())    
{

Sqlcon.Open();

cmd.Connection = Sqlcon;

cmd.CommandType = CommandType.StoredProcedure;

cmd.CommandText = "GetCustomerProductsById";

cmd.Parameters.Add(new SqlParameter("@CustId", SqlDbType.Int, 50));

cmd.Parameters["@CustId"].Value = <Your Input Source>;  
SqlAda = new SqlDataAdapter(cmd);

ds = new DataSet();

SqlAda.Fill(ds);

Datatable dt = new DataTable();
dt = ds.Tables[0];
}

}
SqlDataAdapter-SqlAda;
数据集ds;
使用(SqlConnection Sqlcon=newsqlconnection(strCon))
{    
使用(SqlCommand cmd=new SqlCommand())
{
Sqlcon.Open();
cmd.Connection=Sqlcon;
cmd.CommandType=CommandType.storedProcess;
cmd.CommandText=“GetCustomerProductsById”;
Add(新的SqlParameter(“@CustId”,SqlDbType.Int,50));
cmd.Parameters[“@CustId”].Value=;
SqlAda=新的SqlDataAdapter(cmd);
ds=新数据集();
SqlAda.Fill(ds);
Datatable dt=新的Datatable();
dt=ds.表[0];
}
}

每次购买时是否创建新的CustomerID和TransactionID?为什么?