簡體   English   中英

我如何修改代碼,以便在方法getProductTransaction中,我返回一個事務列表而不是單個事務

[英]How do i modify the codes so that in the method getProductTransaction, I return a list of transactions instead of a single transaction

protected void bind()
{
        Session["name"] = "John";
        string name = Session["name"].ToString();
        List<TransactionDetail> transList = new List<TransactionDetail>();
        transList.Add(aTrans.getProductTransaction(name));

        gv_Transaction.DataSource = transList;
        gv_Transaction.DataBind();
}

public TransactionDetail getProductTransaction(string p_UserName)
{
        TransactionDetail prodDetail = null;
        string tran_ID, offer_ID, user, Prod_Image, prod_Name;
        decimal prod_Price;

        SqlConnection conn = new SqlConnection(connStr);
        string queryStr = "SELECT * FROM TransactionDetail WHERE UserName = @user";

        SqlCommand cmd = new SqlCommand(queryStr, conn);
        cmd.Parameters.AddWithValue("@user", p_UserName);

        conn.Open();

        SqlDataReader dr = cmd.ExecuteReader();

        if (dr.Read())
        {
            tran_ID = dr["TransactionID"].ToString();
            offer_ID = dr["OfferId"].ToString();
            user = dr["UserName"].ToString();
            Prod_Image = dr["Image"].ToString();
            prod_Name = dr["ProductName"].ToString();
            prod_Price = decimal.Parse(dr["ProductPrice"].ToString());
            prodDetail = new TransactionDetail(tran_ID, offer_ID, user, Prod_Image, prod_Name, prod_Price);
        }
        else
        {
            prodDetail = null;
        }

        conn.Close();
        dr.Close();
        dr.Dispose();

        return prodDetail;
}

輸出僅返回單個事務而不是所有事務。 代碼試圖從John檢索所有事務歷史記錄,但現在它只返回一個事務歷史記錄。 是因為需要將其更改為arraylist,以便它具有多個事務。 所以我改變了aspx.cs綁定方法和getProductTransaction

if(dr.Read())更改為while(dr.Read()) (您循環直到Read()為false)

請參閱https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396

您還需要在每個循環上添加List<TransactionDetail>並將返回類型更改為IList<TransactionDetail>並返回列表而不是單個對象。

編輯:這樣的事情應該有效......

protected void bind()
{
    var name = "John";
    Session["name"] = name;
    gv_Transaction.DataSource = getProductTransactions(name);
    gv_Transaction.DataBind();
}

public IList<TransactionDetail> getProductTransactions(string p_UserName)
{
    var transList = new List<TransactionDetail>();
    var queryStr = "SELECT * FROM TransactionDetail WHERE UserName = @user";

    string tran_ID, offer_ID, user, Prod_Image, prod_Name;
    decimal prod_Price;

    using(var conn = new SqlConnection(connStr))
    using(var cmd = new SqlCommand(queryStr, conn))
    {
        cmd.Parameters.AddWithValue("@user", p_UserName);
        conn.Open();
        using(var dr = cmd.ExecuteReader())
        {
            while(dr.Read())
            {
                tran_ID = dr["TransactionID"].ToString();
                offer_ID = dr["OfferId"].ToString();
                user = dr["UserName"].ToString();
                Prod_Image = dr["Image"].ToString();
                prod_Name = dr["ProductName"].ToString();
                prod_Price = decimal.Parse(dr["ProductPrice"].ToString());
                transList.Add(new TransactionDetail(tran_ID, offer_ID, user, Prod_Image, prod_Name, prod_Price));
            }
        }
    }
    return transList;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM