我现在把DBF中的3500多行记录插入到oracle ,过程当中报ORA-01000: 超出打开游标的最大数 这个错误,只插入300行。请各位老大看看我代码有什么不妥。
OleDbConnection dbfconn = new OleDbConnection();
OleDbConnection oraconn = new OleDbConnection();
string xm,hz;
string SQL = "";
string sql1="";
try
{
//string dir = Server.MapPath(@"d:\ykchr");
// dbfconn.ConnectionString ="Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+filepath+";Jet OLEDB:Database Password=yksoft1919;" ;
// dbfconn.Open();
dbfconn.ConnectionString = "Provider=VFPOLEDB.1;Data Source=c:\\person.dbf;Mode=ReadWrite|Share Deny None;Extended " +
"Properties=\"\";User ID=\"\";Password=\"\";Mask Password=False;Cache Authentication=Fa" +
"lse;Encrypt Password=False;Collating Sequence=MACHINE;DSN=\"\"";
dbfconn.Open();
oraconn.ConnectionString ="Provider=OraOLEDB.Oracle.1;User ID=test_appdb;Password=missrain;Data Source=MIS;Extended Properties=;Persist Security Info=True";
oraconn.Open();
SQL ="SELECT * from person ";
OleDbCommand cmd = new OleDbCommand(SQL,dbfconn);
OleDbDataReader reader;
reader=cmd.ExecuteReader();
while(reader.Read())
{
SQL="insert into hr_t_employee_base_copy(employeename,employeecode,employeeid,birthdate) values ('"+reader["name"].ToString()+"','"+reader["xh"].ToString()+"','"+reader["xh"].ToString()+"','"+Convert.ToDateTime(reader["birthday"])+"')";
                                                                                                                                                                                               
cmd = new OleDbCommand(SQL,oraconn);

cmd.ExecuteNonQuery();

}

}
catch(Exception ex)
{
throw ex;
}
finally
{
dbfconn.Close();
oraconn.Close();
}

解决方案 »

  1.   

    不好意思,上一层太乱,重发一次
    OleDbConnection dbfconn = new OleDbConnection();
    OleDbConnection oraconn = new OleDbConnection();
    string xm,hz;
    string SQL = "";
    string sql1="";
    try
    {

    dbfconn.ConnectionString = "Provider=VFPOLEDB.1;Data Source=c:\\person.dbf;Mode=ReadWrite|Share Deny None;Extended " +
    "Properties=\"\";User ID=\"\";Password=\"\";Mask Password=False;Cache Authentication=Fa" +
    "lse;Encrypt Password=False;Collating Sequence=MACHINE;DSN=\"\"";
    dbfconn.Open();
    oraconn.ConnectionString ="Provider=OraOLEDB.Oracle.1;User ID=test_appdb;Password=missrain;Data Source=MIS;Extended Properties=;Persist Security Info=True";
    oraconn.Open();
    SQL ="SELECT * from person ";
    OleDbCommand cmd = new OleDbCommand(SQL,dbfconn);
    OleDbDataReader reader;
    reader=cmd.ExecuteReader();
    while(reader.Read())
    {
    // SQL="insert into hr_t_employee_base_copy(employeename,employeecode,employeeid,birthdate) values ('"+reader["name"].ToString()+"','"+reader["xh"].ToString()+"','"+reader["xh"].ToString()+"','"+Convert.ToDateTime(reader["birthday"])+"')";
    SQL="insert into hr_t_employee_base_copy(employeename,employeecode,employeeid,birthdate) values ('"+reader["name"].ToString()+"','"+reader["xh"].ToString()+"','"+reader["xh"].ToString()+"','"+Convert.ToDateTime(reader["birthday"])+"')";
                                                                                                                                                                                                   
    cmd = new OleDbCommand(SQL,oraconn);

    cmd.ExecuteNonQuery();

    }

    }
    catch(Exception ex)
    {
    throw ex;
    }
    finally
    {
    dbfconn.Close();
    oraconn.Close();
    }

      

  2.   

    参看这篇文章,需要修改oracle设置
    http://www.zhuoda.org/hofman/24140.html
      

  3.   

    有无不修改oracle设置的办法?
      

  4.   

    while(reader.Read())
    {
    oraconn.ConnectionString ="Provider=OraOLEDB.Oracle.1;User ID=test_appdb;Password=missrain;Data Source=MIS;Extended Properties=;Persist Security Info=True";
    oraconn.Open(); SQL="insert into hr_t_employee_base_copy(employeename,employeecode,employeeid,birthdate) values ('"+reader["name"].ToString()+"','"+reader["xh"].ToString()+"','"+reader["xh"].ToString()+"','"+Convert.ToDateTime(reader["birthday"])+"')";
                                                                                                                                                                                                   
    cmd = new OleDbCommand(SQL,oraconn);

    cmd.ExecuteNonQuery();

    }
    这样就可以啦