我必须获取当前存储在DataTable中的记录数量,因为数据库服务器位于其他位置并且连接速度很慢,因此获取记录有时可能需要一些时间,我想知道下载了多少记录。
这是填充数据表的方法:
public DataTable fillMyDataTable(string sQuery)
{
SqlDataAdapter myDataAdapter;
SqlCommandBuilder mySqlCommandBuilder;
DataTable dataTable;
myDataAdapter = new SqlDataAdapter(sQuery, this.connection);
mySqlCommandBuilder = new SqlCommandBuilder(mySqlDataAdapter);
myDataAdapter.SelectCommand.CommandTimeout = 240;
dataTable = new DataTable();
mySqlDataAdapter.Fill(dataTable);
return dataTable;
}
这就是我从上面调用方法的方法: DataTable dt = new DataTable();
private void FillData()
{
string sql = "SELECT Id, Code, Desc FROM myTable";
dt.RowChanged += new DataRowChangeEventHandler(this.dt_RowChanged);
dt = fillMyDataTable(sql);
dt.AcceptChanges();
}
void dt_RowChanged(object sender, DataRowChangeEventArgs e)
{
if (e.Action == DataRowAction.Add)
{
Console.WriteLine("Current no. of rec.: " + dt.Rows.Count.ToString());
}
}
输出应该是2100条记录中的1904条。问题是没有触发dt_RowChanged事件。怎么做?
更新<!/强> 上面的代码一直有效,直到触发dt_RowChanged事件,甚至dt对象都填充了记录。
答案 0 :(得分:1)
要触发事件,请尝试此操作。如果它没有在事件中使用适当的代表。
private void FillData()
{
string sql = "SELECT Id, Code, Desc FROM myTable";
dt = fillMyDataTable(sql);
DataRowChangeEventArgs args = new DataRowChangeEventArgs (dt.Rows, dt.RowState);
dt_RowChanged(this, args);
}
更新
我刚刚注意到你没有声明事件dt_RowChanged并且你解雇了它。也许这就是你的错误。再次检查。
dt.RowChanged += new DataRowChangeEventHandler(this.dt_RowChanged);
答案 1 :(得分:0)
所以你想要计算提取的记录数量吗?
int countFetched = dt.Rows.Count;
答案 2 :(得分:0)
我想我成功了,这是我目前的解决方案:
int iCurrentCount = 0;
int iTotalNumOfRec = 0;
iTotalNumOfRec = getNumOfRec("SELECT COUNT(*) FROM myTable)
dt = fillMyDataTable(sql);
int i = 0;
while (i < iTotlNumOfRec)
{
DataRowChangeEventArgs args = new DataRowChangeEventArgs(dt.Rows[i], DataRowAction.Add);
dt_RowChanged(this, args);
++i;
}
void dt_RowChanged(object sender, DataRowChangeEventArgs e)
{
if (e.Action == DataRowAction.Add)
{
Console.WriteLine("Current rec. no.: " + iCurrentCount.ToString());
iCurrentCount++;
}
}
感谢所有人!