每次启动系统时,系统从甲库中用datareader读取数据,经过转换后添加到乙库的dataset,最后更新到乙库.但现在遇到了这样问题,如无数据更新,系统就遇到异常,DataSet swjDataSet2=new DataSet ();
swjConnection2.Open();//打开
swjAdapter2.Fill (swjDataSet2,"TProgram");
swjConnection2.Close();//及时关闭连接
DataTable objTable = null;
DataRow objnewRow = null;

int nRow = 0;
while (dataReader.Read())
{
// 从dataReader中循环读取数据,经过转换后,添加到dataset2中
// 数据添加完后,再用dataset2中的数据更新swj_edu数据库。
string bianhao=dataReader[0].ToString();
string title=dataReader[1].ToString();
//取shijian字段的前10位,并将其转换成DataTime
DateTime shijian=Convert.ToDateTime((dataReader[2].ToString()).Substring(0,10));
string zhuangtai=dataReader[3].ToString();
string filesize=dataReader[4].ToString();
//将字段filesize从string转换成int;
int size=Convert.ToInt32(filesize);
string jieshousize=dataReader[5].ToString();
int jieshou=Convert.ToInt32(jieshousize);
int bilv=0;
if (size==0 )
{
bilv=0;
}
else
{
bilv=jieshou/size; }
//将datareader读取的字段数据添加到dataset中
objTable = swjDataSet2.Tables["TProgram"];
objnewRow = objTable.NewRow();
objnewRow["Program_ID"] =bianhao;
objnewRow["Title"] = title;
objnewRow["StartTime"] =shijian;
objnewRow["Status"] = zhuangtai;
objnewRow["bilv"] = bilv;
objTable.Rows.Add(objnewRow);                ++nRow;
}    
dataReader.Close();
//将dataset中的数据更新数据库swj_edu
OleDbCommandBuilder objBuilder = null;
objBuilder = new OleDbCommandBuilder(swjAdapter2);

swjAdapter2.InsertCommand = objBuilder.GetInsertCommand();
swjAdapter2.UpdateCommand = objBuilder.GetUpdateCommand(); swjAdapter2.Update(swjDataSet2,"TProgram");
我估计是我的思路有问题,谁能教我解决这个问题?给个思路就行.

解决方案 »

  1.   

    再更新到dataset之前,先判断下datareader中有没有取到数据,取到了就更新,没有取到就不更新
      

  2.   

    要先判断if( !datareader.Read() )
     return;
      

  3.   

    shilei831115(柔石)   这样能执行啊 
    livode(啊水)"再更新到dataset之前,先判断下datareader中有没有取到数据,取到了就更新,没有取到就不更新"  这个我怎么判断是不是新数据呢?象我上面写的,一取就把甲库里的所有数据都取出来了 
      

  4.   

    shilei831115(柔石) 是的啊 这样第一次执行正常 ,第二次就不行了  一行不能在一个表中添加多次啊