如何使用C#在类内部使用Datareader

Com*_*umb 1 c# asp.net data-binding class

我有SqlDataReader一个页面的代码(实际上是一个Web用户控件).我想将此代码移动到用户控件调用的单独类中.但是如何将类中的数据绑定到页面转发器?

这是一个可接受的概念吗?

这是我的代码移到了一个类:

public class ShoppingCart
{
    public ShoppingCart(int ShoppingCartHeadID)
    {
        SqlConnection conn;
        SqlCommand comm;
        SqlDataReader reader;

        conn = new SqlConnection(iceConns.iconn);

        comm = new SqlCommand("Ordering.sl_ShoppingCartContents", conn);
        comm.CommandType = CommandType.StoredProcedure;
        comm.Parameters.Add(new SqlParameter("@shoppingCartHeadID", SqlDbType.Int));
        comm.Parameters["@shoppingCartHeadID"].Value = ShoppingCartHeadID;

        try
        {
            conn.Open();
            reader = comm.ExecuteReader();
            Cart.DataSource = reader; //This ain't gonna work!
            if (reader.HasRows)
            {
                Cart.DataBind(); //This ain't gonna work!
                varCartStatus = true;
            }
            reader.Close();
        }
        catch
        {
            //Error trapping
        }
        finally
        {
            conn.Close();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激.

sin*_*ase 5

您应该为返回的数据创建一个实体对象.然后,您可以将任何控件绑定到您创建的对象的List.

使用映射到数据库表的属性创建Cart对象.然后创建一个类似CartRepository的类,它将有一个名为GetCartById(CartId)的方法.这个方法将完成上面的工作,但不是试图在这里绑定任何东西,你只需要填充你的Cart对象.返回这些对象的列表,您可以将该列表绑定到任何控件.

public class Cart
{
    //Properties from cart - Just using name as an example.
    public string name { get; set; }
}

public class CartRepository
{
    public List<Cart> GetById(int cartId)
    {
        List<Cart> carts = new List<Cart>();

        // Do all sql work including setting up connection, command, ect.

        while(reader.read())
        {
            // Map your reader to your cart object.
            Cart c = new Cart();
            c.name = reader["name"].ToString();
            carts.add(c);
        }

        return carts;
    }
}
Run Code Online (Sandbox Code Playgroud)

现在从您的代码中将控件绑定到从存储库对象返回的List.

 myControl1.DataSource = CartRepository.GetById(cartId);
Run Code Online (Sandbox Code Playgroud)