c# vs2010 excel 上传oracle数据

excel 数据表上传到oracle数据库,步骤如下:

1、打开本地excel文件

2、用OleDb连接excel文件

3、将来excel的数据读取到dataset中

4、把dataset 中数据insert到oracle中相应的表中

下面截图说明:

建立项目文件,很简单,就是建立普通的winform项目。其中访问oracle要添加引用System.Data.OracleClient;

vs2010 默认是.net framework 4.0 client profile 。在添加引用时是看不到System.Data.OracleClient;需要在

项目文件上右击,选择属性。会弹出如下对话框:

在target framework 下拉框中 选择.net framework 4。这样后续添加引用时,才能在.net页签看到System.Data.OracleClient;

下面是全部代码

using System;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using System.IO;

using System.Data.OleDb;

using System.Data.OracleClient;

namespace WindowsFormsApplication4

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

private void button1_Click(object sender, EventArgs e)

{

openFileDialog1.Filter = "1(*.xlsx)|*.xlsx";

openFileDialog1.ShowDialog();//打開對話方塊

this.textBox1.Text = openFileDialog1.FileName;//得到檔=路徑+名稱

}

private void button2_Click(object sender, EventArgs e)

{

try

{

DataSet ds = ImportExcel(this.textBox1.Text);//將excel的對象先放到ds 中

if (ds != null)

{

if (ds.Tables[0].Rows.Count > 0)//如果ds中是有值的話 執行下面的操作

{

if (ExportInfo(ds))

{

MessageBox.Show("導入資料庫成功!");

}

else

{

MessageBox.Show("導入資料庫失敗!");

}

}

}

}

catch

{

MessageBox.Show("導入資料庫失敗 請檢查導入檔是否填寫正確!");

}

}

public static DataSet ImportExcel(string file)

{

FileInfo fileInfo = new FileInfo(file);

if (!fileInfo.Exists) return null; string strConn = @"Provider=Microsoft.Ace.OleDb.12.0;Data Source=" + file + ";Extended Properties=‘Excel 12.0; HDR=yes; IMEX=2‘";

// 此处用的是excel2010,如果为其他excel版本,请选择相应的连接驱动和字符串

OleDbConnection objConn = new OleDbConnection(strConn);

DataSet dsExcel = new DataSet();

try

{

objConn.Open();

string strSql = "select * from [Sheet1$]";

OleDbDataAdapter odbcExcelDataAdapter = new OleDbDataAdapter(strSql, objConn);

odbcExcelDataAdapter.Fill(dsExcel); return dsExcel;

}

catch (Exception ex)

{

throw ex;

}

}

public static bool ExportInfo(DataSet ds)

{

if (ds != null)

{

if (ds.Tables[0].Rows.Count > 0)//如果ds中是有值的話 執行下面的操作

{

return Do(ds);//執行成功

}

}

return false;//執行失敗

}

public static bool Do(DataSet ds)

{

OracleConnection conNorthwind = new OracleConnection("Data Source=tiptop;User Id=iteqdg;Password=iteqdg;Integrated Security=no;");//連結字串

OracleCommand commandNorthwind = new OracleCommand();

try

{

conNorthwind.Open();//打開資料庫連結

OracleTransaction tranNorthwind = conNorthwind.BeginTransaction();//開始事務

for (int i = 0; i < ds.Tables[0].Rows.Count; i++)

{

DataRow dr = ds.Tables[0].Rows[i];

OracleParameter[] parameters = null;//為了得到插入資料庫的參數 定義參數物件 為空

string sql = GetSqlString(dr, out parameters);//執行sql -->用out關鍵字得到參數 賦到parameters物件上

//插入資料庫中

PrepareCommand(commandNorthwind, conNorthwind, tranNorthwind, sql, parameters);

commandNorthwind.ExecuteNonQuery();//執行操作

}

commandNorthwind.Transaction.Commit();//提交事務

conNorthwind.Close();//關閉資料庫連結資源

return true;

}

catch//如果有異常 不一定要捕捉異常 但要rollback事務

{

if (commandNorthwind.Transaction != null && conNorthwind != null)

{

commandNorthwind.Transaction.Rollback();//rollback事務

conNorthwind.Close();//關閉資料庫連結

}

return false;

}

}

/// <summary>

/// 每一行資訊插入資料庫中

/// </summary>

/// <param name="dr">要插入的這一行ds-datarow對象</param>

/// <returns>sql語句和用out關鍵字的參數陣列物件</returns>

public static string GetSqlString(DataRow dr, out OracleParameter[] parameters)

{

StringBuilder sb = new StringBuilder();

sb.Append("INSERT INTO TEXT VALUES(:ID,:NAME)");

parameters = new OracleParameter[] { new OracleParameter(":ID", Convert.ToString(dr[0])), new OracleParameter(":NAME", Convert.ToString(dr[1])) };

return sb.ToString();//將sqlreturn出去

}

private static void PrepareCommand(OracleCommand cmd, OracleConnection conn, OracleTransaction trans, string cmdText, OracleParameter[] cmdParms)

{

PrepareCommand(cmd, conn, trans, cmdText, CommandType.Text, cmdParms);

}

//參數設定  此方法被重載

private static void PrepareCommand(OracleCommand cmd, OracleConnection conn, OracleTransaction trans, string cmdText, CommandType cmdType, OracleParameter[] cmdParms)

{

if (conn.State != ConnectionState.Open)

{

conn.Open();

}

cmd.Connection = conn;

cmd.CommandText = cmdText;

if (trans != null)

{

cmd.Transaction = trans;

}

cmd.CommandType = cmdType;  // CommandType.Text;//cmdType;

if (cmdParms != null)

{

foreach (OracleParameter parameter in cmdParms)

{

if (parameter != null)

{

if (parameter.Value == null)

{

parameter.Value = DBNull.Value;

}

cmd.Parameters.Add(parameter);

}

}

}

}

}

}

时间: 2024-11-25 20:17:36

c# vs2010 excel 上传oracle数据的相关文章

Excel上传并读取数据

最近一段时间,维护一个旧系统,其中有一个功能,是把Excel上传,并读取数据进行维护,然后转插入至SQL数据库中.下面Insus.NET使用asp.net 标准上传控件: <asp:FileUpload ID="FileUpload1" runat="server" /> Insus.NET习惯性,在每一个专案中,都会创建一个临时目录. 因为很多时候,我们处理一些临时文件,或是数据均可在此临时目录中进行.它有点像Windows下的临时目录一样. 上面代码

java 后台解析excel上传数据 工具类

后台调用: MultipartFile file: List<String[]> excelDate package com.holike.crm.partner.sys; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import org.apache.log4j.Logger; import org.apache.poi.h

C#Excel上传批量导入sqlserver

前台: <x:FileUpload ID="btnUpField" runat="server" Label="上传Excel批量导入用户信息" ShowLabel="true" > </x:FileUpload> <x:Button ID="Button1" Text="上传" runat="server" Icon="Sys

IT轮子系列(六)——Excel上传与解析,一套代码解决所有Excel业务上传,你Get到了吗

前言 在日常开发当中,excel的上传与解析是很常见的.根据业务不同,解析的数据模型也都不一样.不同的数据模型也就需要不同的校验逻辑,这往往需要写多套的代码进行字段的检验,如必填项,数据格式.为了避免重复编写逻辑检验代码,于是有了这篇文章. 第一步.读取Excel表格数据 1 public ActionResult UploadExcel() 2 { 3 ResultInfo<List<User>> result = new ResultInfo<List<User&g

Thinkphp5+PHPExcel实现批量上传表格数据功能

http://www.jb51.net/article/129262.htm 1.首先要下载PHPExcel放到vendor文件夹下,我的路径是:项目/vendor/PHPExcel/,把下载的PHPExcel文件放在这里 2.前端代码 <!DOCTYPE html> <html> <head> <title>批量导入数据</title> </head> <body> <form action="{:url

winform下通过webclient使用非流方式上传(post)数据和文件

这两天因为工作的需要,需要做一个winform上传数据到服务器端的程序.当时第一个想法是通过webservice的方式来实现,后来觉得麻 烦,想偷懒就没有用这样的方式,http的post方式变成了第一选择.因为以前用的都是httpwebrequest之类的东西进行post提 交,winform下面还真的是第一次,不过很快就在网上找到了webclient这个类,接下来开始实现功能,话说webclient用起来还真的很简 单,一个头信息的声明,然后是URL,最后是post的数据,就完事了.正在高兴的

使用cmd命令行方式登录ftp上传下载数据

部分用户在使用ftp工具登录空间上传下载过程中经常会遇到各种问题,如主动模式,被动模式,以及其他导致无法登陆ftp .上传数据.下载数据的问题,这时候不妨使用一下命令行方式.命令行下可以避免很多由于ftp工具配置导致的问题,而且这种方式下下载数据的速率明显比使用ftp工具更快.下面就来看一下如何使用ftp 命令进行简单的上传下载数据.1.登录ftp在“开始”->”运行”中输入“cmd”,进入cmd命令行模式,接下来输入:ftp 118.193.22.151输入自己的网站ip地址,接下来会提示输入

拼接上传文件数据

学会拼接上传文件数据. { * 有些服务器可以在上传文件的同时,提交一些文本内容给服务器 * 典型应用: <1>新浪微博: 上传图片的同时,发送一条微博信息! <2>购物评论: 购买商品之后发表评论的时候图片+评论内容! 多文件上传的数据格式3 { Content-Type: multipart/form-data; boundary=boundary // ------ 以下内容,是提供给服务器的二进制数据格式 --boundary\r\n Content-Disposition

ASP.NET MVC编程入门--Excel上传

参考博客:ASP.NET MVC下使用文件上传 参考博客:NPOI使用手册 参考博客:ASP.Net MVC利用NPOI导入导出Excel 参考博客:C# NPOI 导入与导出Excel文档 兼容xlsx, xls 文件上传代码块 #region EXCEL上传 /// <summary> /// EXCEL上传 /// </summary> /// <param name="fileData"></param> /// <retu