使用C#将数据从excel文件读入oracle数据库

时间:2018-06-22 07:54:50

标签: c# oracle

我需要将数据从插入到oracle数据库中 Excel文件。我尝试了这个,但没有任何错误,但是 excel文件中的数据未插入表中。

  using System;
  using System.Web;
  using System.Web.UI;
  using System.Web.UI.WebControls;
   using System.Data;

   using System.Data.OleDb;
   using System.IO;

   public partial class _Default : System.Web.UI.Page
  {
  protected void Page_Load(object sender, EventArgs e)
  {

  }

  protected void Button1_Click(object sender, EventArgs e)
   {
    // create some string variables and assign null values 
    string ex_name = "";
    string ex_school = "";
    string ex_id = "";
    string ex_college = "";
    string ex_office = "";
    string a = "";
    //string myfile_name = 
    Path.GetFileName(FileUpload1.PostedFile.FileName);
    // assign session object data to myfile_name variable
    string myfile_name = Session["name"].ToString();
    // get complete path of excel sheet and assing it Excel_path variable 
    string Excel_path = Server.MapPath(myfile_name);
    // create connection with excel database  
    OleDbConnection my_con = new 
   OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + 
    Excel_path + ";Extended Properties=Excel 8.0;Persist Security 
    Info=False");
    my_con.Open();
    try
    {
        // get the excel file data and assign it in OleDbcoomad 
    object(o_cmd)
        OleDbCommand o_cmd = new OleDbCommand("select*from [Sheet1$]", 
    my_con);
        // read the excel file data and assing it o_dr object
        OleDbDataReader o_dr = o_cmd.ExecuteReader();
        while (o_dr.Read())
        {
            //get first row data and assign it ex_id variable 
            ex_name = o_dr[0].ToString();
            //get second row data and assign it ex_name variable
            ex_id = o_dr[1].ToString();
            //get thirdt row data and assign it ex_name variable
            ex_school = o_dr[2].ToString();
            //get first row data and assign it ex_location variable
            ex_college = o_dr[3].ToString();
            ex_office = o_dr[4].ToString();
            // create a connection string with your sql database 
            string oradb = "Provider=**;Data Source=**;User 
        Id=**;Password=**;";

            string cmdText = @"INSERT INTO tablename
                   (NAME, ID, SCHOOL,COLLEGE) 
                   VALUES(?,?,?,?,?)";
            OleDbConnection con = new OleDbConnection(oradb);


            con.Open();

            //insert excel data in student table
            OleDbCommand cmd = new OleDbCommand(cmdText, con);
            cmd.Parameters.Add("p1", OleDbType.VarChar).Value = ex_name;
            cmd.Parameters.Add("p2", OleDbType.VarChar).Value = ex_id;
            cmd.Parameters.Add("p3", OleDbType.VarChar).Value = ex_school;
            cmd.Parameters.Add("p4", OleDbType.VarChar).Value = ex_college;
            cmd.Parameters.Add("p4", OleDbType.VarChar).Value = ex_office;
             int i = cmd.ExecuteNonQuery();
            if (i > 0)
            {
                Response.Write("Succesfull");
            }
              con.Close();
          }
       }
       catch (Exception ex)
      {
        a = ex.Message;
      }
     }

   }

我尝试了上述操作,但是如果有人知道是什么错误或者有其他方法可以执行此操作,则无法插入。

1 个答案:

答案 0 :(得分:0)

您应该使用a = ex.Message;Debug.WriteLine(ex.Message);而不是MessageBox.Show(ex.Message);,然后您还会看到错误!

在第一眼上,我至少看到两个问题:

string cmdText = @"INSERT INTO tablename (NAME, ID, SCHOOL,COLLEGE)  VALUES (?,?,?,?,?)";

您有四列,但有五个问号。

cmd.Parameters.Add("p1", OleDbType.VarChar).Value = ex_name;
cmd.Parameters.Add("p2", OleDbType.VarChar).Value = ex_id;
cmd.Parameters.Add("p3", OleDbType.VarChar).Value = ex_school;
cmd.Parameters.Add("p4", OleDbType.VarChar).Value = ex_college;
cmd.Parameters.Add("p4", OleDbType.VarChar).Value = ex_office;

我认为您不能添加两个具有相同名称p4的参数

然后您创建新的OleDbCommand并为Excel中的每一行一次又一次添加参数。这不会破坏您的功能,但是性能会很差。