gpt4 book ai didi

c# - 如何使用 C# 在类中使用 Datareader

转载 作者:太空宇宙 更新时间:2023-11-03 19:27:33 25 4
gpt4 key购买 nike

我有 SqlDataReader 位于页面代码后面(实际上是网络用户控件)。我想将此代码移动到用户控件调用的单独类。但是如何将类中的数据绑定(bind)到页面转发器?

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

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

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();
}
}
}

如有任何帮助,我们将不胜感激。

最佳答案

您应该为返回的数据创建一个实体对象。然后您可以将任何控件绑定(bind)到您创建的对象的列表。

使用映射到您的数据库表的属性创建一个 Cart 对象。然后创建一个像 CartRepository 这样的类,它有一个名为 GetCartById(CartId) 的方法。此方法将完成上述工作,但您不会尝试在此处绑定(bind)任何内容,而只是填充您的 Cart 对象。返回这些对象的列表,您可以将该列表绑定(bind)到任何控件。

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;
}
}

现在从您的代码中只需将您的控件绑定(bind)到从存储库对象返回的列表。

 myControl1.DataSource = CartRepository.GetById(cartId);

关于c# - 如何使用 C# 在类中使用 Datareader,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7445285/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com