这是推荐的
while (reader.Read()) { table.Rows.Add( new object[] { reader[0], reader[1], reader[2], reader[3] } ); table.AcceptChanges(); }
要么
while (reader.Read()) { table.Rows.Add( new object[] { reader[0], reader[1], reader[2], reader[3] } ); } table.AcceptChanges();
注意放置table.AcceptChanges的位置.
编辑1
这是代码块:
protected void Page_Load(object sender, EventArgs e) { IDataReader reader = cust.GetCustomerOrderSummary("99999"); using (DataSet ds = new DataSet()) { using (DataTable table = new DataTable { TableName = "OrderSummary" }) { DataColumn idColumn = table.Columns.Add("number", typeof(int)); table.Columns.Add("name", typeof(string)); table.Columns.Add("quantity", typeof(int)); table.Columns.Add("prev_quantity", typeof(int)); table.PrimaryKey = new DataColumn[] { idColumn }; while (reader.Read()) { table.Rows.Add( new object[]{ reader[0], reader[1], reader[2], reader[3] } ); table.AcceptChanges(); } ds.Tables.Add(table); rptCustomerOrder report = new rptCustomerOrder { DataSource = ds }; ReportViewer1.Report = report; } } }
编辑2
在阅读了MSDN文章后,我决定根据以下语句(来自文章)将AcceptChanges()置于循环之外:
在DataTable级别调用AcceptChanges会导致调用每个DataRow的AcceptChanges方法.
Furqan Safda.. 7
呼唤AcceptChanges
加入新行实际上会变成后DataRowState
新添加的DataRow
自Added
到Unchanged
.如果你使用它,你可能会失去对新添加的行的跟踪以及持续时间.ADO.NET无法识别需要在数据库中插入的行.因此,明智地选择此选项,您可能甚至不需要它.
呼唤AcceptChanges
加入新行实际上会变成后DataRowState
新添加的DataRow
自Added
到Unchanged
.如果你使用它,你可能会失去对新添加的行的跟踪以及持续时间.ADO.NET无法识别需要在数据库中插入的行.因此,明智地选择此选项,您可能甚至不需要它.