ASP.NET上传excel文档并读写进oracle,但是现在data table存入oracle那段出了问题,sourcecode如下
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Web.Security;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls.WebParts;
using System.IO;
using System.Data.OleDb;
using System.Data.SqlClient;
using System.Web.UI.WebControls;
using System.Data.OracleClient;
public partial class his_control1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
/// <summary>
/// 上传文件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void Button1_Click(object sender, EventArgs e)
{
string fileName = fileId.FileName;
string savePath = Server.MapPath("../Uploadfile/");
FileOperatpr(fileName, savePath);
fileId.SaveAs(savePath + fileName);
DataOperator(fileName, savePath);
}
/// <summary>
/// 数据操作
/// </summary>
/// <param name="fileName"></param>
/// <param name="savePath"></param>
private void DataOperator(string fileName, string savePath)
{
string myString = "Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = " + savePath + fileName + ";Extended Properties=Excel 8.0";
OleDbConnection oconn = new OleDbConnection(myString);
oconn.Open();
DataSet ds = new DataSet();
OleDbDataAdapter oda = new OleDbDataAdapter("select * from [Control$]", oconn);
oda.Fill(ds);
oconn.Close();
DataSetOperator(ds,savePath+fileName);
}
/// <summary>
/// 数据集操作
/// </summary>
/// <param name="ds"></param>
private void DataSetOperator(DataSet ds,string filePath)
{
using (Oracle.ManagedDataAccess.Client.OracleConnection conn = new Oracle.ManagedDataAccess.Client.OracleConnection())
{
conn.ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
conn.Open();
int k = 0;
if (ds.Tables[0].Rows.Count < 1)
{
Response.Write("<script>alert('没有数据!')</script>");
return;
}
try
{
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
Oracle.ManagedDataAccess.Client.OracleCommand cmd = new Oracle.ManagedDataAccess.Client.OracleCommand("insert into SCC_B2B.HIS_DEVICE(DEVICE_NAME,DEVICE_TYPE)values( '"+ds.Tables[0].Rows[i][0].ToString()+"','"+ds.Tables[0].Rows[i][1].ToString()+"')",conn);
cmd.ExecuteNonQuery();
k += cmd.ExecuteNonQuery();
}
conn.Close();
conn.Dispose();
}
catch (Exception ex)
{
Response.Write("发生异常" + ex.Message);
}
finally
{
Response.Write("上传成功" + k + "条");
File.Delete(filePath);
}
}
}
/// <summary>
/// 文件操作
/// </summary>
/// <param name="fileName"></param>
/// <param name="savePath"></param>
private void FileOperatpr(string fileName, string savePath)
{
if (!Directory.Exists(savePath))
{
Directory.CreateDirectory(savePath);
}
if (File.Exists(savePath + fileName))
{
File.Delete(savePath + fileName);
}
}
}
运行之后只能增加一笔数据,然后就报错ORA-00001: unique constraint violated
网上搜了一下发现有更好更快的方法将datatable里的数据insert到oracle,请大神帮忙