我有一段程序,是将远程Oracle数据库中的数据导入本地sql server2000。 
我的设计思路是读一条Oracle的数据,查找sql server ,如果本地存在相同的记录,且zt字段为1,则替换yffs字段,否则,删除原纪录,插入新纪录。 
以前程序是可以执行的,但是硬盘重装后,这段程序运行的时候总是这样:第一次执行循环的时候取数据是对的,但是第二次的时候,取到的数据就变成乱码,比如应该是”2009”,但是取值变成了“20/0/0",这样插入的时候就报错了。请教一下这是什么原因?另外有什么高效的导入方法。急切等待中!
string date1=this.dateTimePicker1.Value.ToShortDateString()+"%";
string StrSQL11="alter session set nls_date_format='yyyy-mm-dd'";
string StrSQL12= "SELECT * FROM bkjk_ckbkjkb WHERE  "+cjdmbl+" and scsj like '";
StrSQL12+=date1+"'";
string StrSQL14= "SELECT count(*) FROM bkjk_ckbkjkb WHERE  "+cjdmbl+" and scsj like '";
StrSQL14+=date1+"'";
this.oracleCommand1.CommandText=StrSQL11;
this.oracleCommand1.Connection=this.oracleConnection1;
this.oracleConnection1.Open();
this.oracleCommand1.ExecuteNonQuery();
this.oracleConnection1.Close();
this.oracleCommand1.CommandText=StrSQL14;
this.oracleCommand1.Connection=this.oracleConnection1;
this.oracleConnection1.Open();
int numcols= Convert.ToInt32(this.oracleCommand1.ExecuteScalar());
this.oracleConnection1.Close();
if (numcols!=0)
{
  int m=0;
  this.progressBar1.Minimum=0;
  this.progressBar1.Value=m;
  this.progressBar1.Maximum=numcols;
  this.oracleCommand1.CommandText=StrSQL12;
  this.oracleCommand1.Connection=this.oracleConnection1;
  this.oracleConnection1.Open();
  OracleDataReader MyReader=oracleCommand1.ExecuteReader();
  this.odbcCommand1.Connection=this.odbcConnection1;
  while (MyReader.Read())
{
string bbkdh=MyReader.GetValue(2).ToString();
string bbkzl=MyReader.GetValue(3).ToString();
string bqb=MyReader.GetValue(4).ToString();
string bnf=MyReader.GetValue(5).ToString();
DateTime      bffsj=System.Convert.ToDateTime(MyReader.GetValue(6));
int byffs=System.Convert.ToInt32(MyReader.GetValue(8));
int   bqffs=System.Convert.ToInt32(MyReader.GetValue(9));
                DateTime      bscsj=System.Convert.ToDateTime(MyReader.GetValue(11));
string bjdjdm=MyReader.GetValue(14).ToString();
string bjdjjc=MyReader.GetValue(15).ToString();
string bcjdm=MyReader.GetValue(17).ToString();
int        btx=System.Convert.ToInt32(MyReader.GetValue(23));
string bbkjc=MyReader.GetValue(29).ToString();
string bgkdm=MyReader.GetValue(32).ToString();
string StrSQL122= "SELECT count(*) FROM bkjk_ckbkjkb_currday WHERE  cjdm='";
StrSQL122 +=bcjdm+"' and  bkdh='"+bbkdh+"' and nf='"+bnf+"' and qb='"+bqb+"' and tx='"+btx+"' and jdjdm='"+bjdjdm+"'";
this.odbcCommand1.CommandText=StrSQL122;
this.odbcCommand1.Connection=this.odbcConnection1;
this.odbcConnection1.Open();
int i=(Int32) this.odbcCommand1.ExecuteScalar();
this.odbcConnection1.Close();
string StrSQL13="";
if (i!=0)
{
string StrSQL123= "SELECT zt FROM bkjk_ckbkjkb_currday WHERE  cjdm='";
StrSQL123 += bcjdm+"' and bkdh='"+bbkdh+"' and nf='"+bnf+"' and qb='"+bqb+"' and tx='"+btx+"' and jdjdm='"+bjdjdm+"'";
this.odbcCommand1.CommandText=StrSQL123;
this.odbcCommand1.Connection=this.odbcConnection1;
this.odbcConnection1.Open();
string zt1=this.odbcCommand1.ExecuteScalar().ToString();
this.odbcConnection1.Close();
if (zt1=="1")
{
StrSQL13= "update bkjk_ckbkjkb_currday set yffs='"+byffs+"',qffs='"+bqffs+"',scsj='"+bscsj+"',zt='1'  where cjdm='";
StrSQL13+=bcjdm+"' and bkdh='"+bbkdh+"' and nf='"+bnf+"' and qb='"+bqb+"' and tx='"+btx+"' and jdjdm='"+bjdjdm+"'";
}
else
{
StrSQL13= "update bkjk_ckbkjkb_currday set yffs='"+byffs+"',qffs='"+bqffs+"',scsj='"+bscsj+"',zt='0'  where cjdm='";
StrSQL13+= bcjdm+"' and bkdh='"+bbkdh+"' and nf='"+bnf+"' and qb='"+bqb+"' and tx='"+btx+"' and jdjdm='"+bjdjdm+"'";
}
}
else
{
StrSQL13= "insert into bkjk_ckbkjkb_currday(bkdh,bkzl,qb,nf,ffsj,zt,yffs,qffs,scsj,jdjdm,jdjjc,cjdm,tx,bkjc,gkdm) values('";
  StrSQL13+=bbkdh+"','"+bbkzl+"','"+bqb+"','"+bnf+"','"+bffsj+"','0','"+byffs+"','"+bqffs+"','"+bscsj+"','"+bjdjdm+"','"+bjdjjc+"','"+bcjdm+"','"+btx+"','"+bbkjc+"','"+bgkdm+"')";
}
this.odbcCommand1.CommandText =StrSQL13;
this.odbcConnection1.Open();
this.odbcCommand1.ExecuteNonQuery();
this.odbcConnection1.Close();
this.progressBar1.Value=this.progressBar1.Value+1;

解决方案 »

  1.   

    就是这段出错 
    while (MyReader.Read()) 

    string bbkdh=MyReader.GetValue(2).ToString(); 
    string bbkzl=MyReader.GetValue(3).ToString(); 
    string bqb=MyReader.GetValue(4).ToString(); 
    string bnf=MyReader.GetValue(5).ToString(); 
    DateTime      bffsj=System.Convert.ToDateTime(MyReader.GetValue(6)); 
    int byffs=System.Convert.ToInt32(MyReader.GetValue(8)); 
    int  bqffs=System.Convert.ToInt32(MyReader.GetValue(9)); 
                    DateTime      bscsj=System.Convert.ToDateTime(MyReader.GetValue(11)); 
    string bjdjdm=MyReader.GetValue(14).ToString(); 
    string bjdjjc=MyReader.GetValue(15).ToString(); 
    string bcjdm=MyReader.GetValue(17).ToString(); 
    int      btx=System.Convert.ToInt32(MyReader.GetValue(23)); 
    string bbkjc=MyReader.GetValue(29).ToString(); 
    string bgkdm=MyReader.GetValue(32).ToString
    .........
    }