我需要将数据从插入到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;
}
}
}
我尝试了上述操作,但是如果有人知道是什么错误或者有其他方法可以执行此操作,则无法插入。
答案 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中的每一行一次又一次添加参数。这不会破坏您的功能,但是性能会很差。