我在同一页面上使用了多个转发器。但是,当我使用Execute reader for 2nd repeater时,它会让已经执行的读取器运行的异常...所以关闭它。我把ExecuteReader(CommandBehavior.CloseConnection)
但是它给出了命令行为不存在的错误...对这个问题有任何想法吗?
答案 0 :(得分:1)
如果您指定DataReader
,则需要明确关闭CommandBehavior
,但不会为您执行此操作。
答案 1 :(得分:1)
我个人会将UI控件绑定到强类型对象。例如,我将定义一个产品模型:
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
}
然后是从数据库中读取产品的方法:
public static IEnumerable<Product> GetProducts()
{
using (var conn = new SqlConnection("Some connection string"))
using (var cmd = conn.CreateCommand())
{
conn.Open();
cmd.CommandText = "SELECT prod_id, prod_name FROM products";
using (var reader = cmd.ExecuteReader())
{
while (reader.Read())
{
yield return new Product
{
Id = reader.GetInt32(reader.GetOrdinal("prod_id")),
Name = reader.GetString(reader.GetOrdinal("prod_name")),
};
}
}
}
}
在Web层我会调用此方法来获取我的产品并将它们绑定到一些UI控件:
protected void Page_Load(object sender, EventArgs e)
{
var products = Db.GetProducts().ToArray();
repeater1.DataSource = products;
repeater2.DataSource = products;
gridView.DataSource = products;
...
}
当您厌倦编写这些SQL查询时,您可能会看一下ORM,例如Entity Framework。