c# vs2010 excel 上传oracle数据

excel 数据表上传到oracle数据库。过程例如以下:

1、打开本地excel文件

2、用OleDb连接excel文件

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

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

以下截图说明:


建立项目文件。非常easy。就是建立普通的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);
                    }
                }
            }
        }
    }
}

转载于:https://www.cnblogs.com/llguanli/p/8919101.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/570927.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Nacos配置文件覆盖问题

近期新项目上cloud alibaba架构 用的注册和配置中心就是用的nacos Nacos作为配置中心给我的感觉也是不是很好用&#xff0c;大概配置中心都不是很好用吧&#xff0c;可能用多了会好点 首先说一下遇到的问题&#xff0c; nacos有几个范围性的概念 我就不说了 1.首先是命名空…

leetCode题解之Reshape the Matrix

1、题目描述 2、分析 使用了一个队列。 3、代码 1 vector<vector<int>> matrixReshape(vector<vector<int>>& nums, int r, int c) {2 3 if( nums.size() * nums[0].size() ! r * c )4 return nums;5 vecto…

515Nod 1126 求递推序列的第n项【矩阵快速幂】

有一个序列是这样定义的&#xff1a;f(1) 1, f(2) 1, f(n) (A * f(n - 1) B * f(n - 2)) mod 7.给出A&#xff0c;B和N&#xff0c;求f(n)的值。Input输入3个数&#xff1a;A,B,N。数字之间用空格分割。(-10000 < A, B < 10000, 1 < N < 10^9) Output输出f(n)的…

特殊表情存数据库处理

开发途中遇到评价的功能&#xff0c;需要存入表情符号比如&#xff1a; 以及这种 存入数据库的时候会抛出异常&#xff0c;\x86\啥的 百度解决办法是 数据库改utf8mb4 但是测试改表的字符集并没有用&#xff0c; 然后我也没敢改库的字符集仍然使用utf8 我的解决办法是代码层…

转 【MQTT】在Windows下搭建MQTT服务器

MQTT简介 MQ 遥测传输 (MQTT) 是轻量级基于代理的发布/订阅的消息传输协议&#xff0c;设计思想是开放、简单、轻量、易于实现。这些特点使它适用于受限环境。该协议的特点有&#xff1a; 使用发布/订阅消息模式&#xff0c;提供一对多的消息发布&#xff0c;解除应用程序耦合。…

记录一次StackOverflowError问题

StackOverflowError Idea启动一直抛出StackOverflowError栈溢出&#xff0c;大概率是跟刚写的代码相关 public class WebServiceConfig {private static WebServiceConfig cfg new WebServiceConfig();// Web服务的URLprivate String address;// Web服务接口private Class s…

多数据源处理-苞米豆-dynamic

微服务项目虽然每个服务可以单独使用一个库&#xff0c;但是某些特定服务&#xff0c;如调度中心服务&#xff0c;定时任务等&#xff0c;如果还是使用rpc或者fegin频繁进行远程调用&#xff0c;总感觉不是很合适 所以对单服务进行了多数据源处理 使用的是苞米豆的 dynamic-d…

Druid的外网访问异常

本地启动访问无异常&#xff0c;部署至Linux服务器后无法访问 #合并多个DruidDataSource的监控数据use-global-data-source-stat: truestat-view-servlet:login-username: adminlogin-password: adminreset-enable: falseurl-pattern: /druid/*# 添加IP白名单allow: "&quo…

Linux项目第一次访问非常慢,后来很快的异常

最近项目本地访问和测试服务器访问都没出现访问很慢的问题。 近期要上生产部署&#xff0c;所以对生产环境的组件及各服务进行了部署&#xff0c;部署完成后进行测试发现请求耗时异常 比如一个订单查询请求&#xff0c;第一次请求耗时5m 或者15s 而且很有规律&#xff0c;不多…

spring注解大全

【转载】https://www.cnblogs.com/zxf330301/articles/6559210.html spring component的作用 1、controller 控制器&#xff08;注入服务&#xff09; 2、service 服务&#xff08;注入dao&#xff09; 3、repository dao&#xff08;实现dao访问&#xff09; 4、component &am…

Flink1.12.0使用过程中遇到的异常

1.Record has Long.MIN_VALUE timestamp ( no timestamp marker). Is the time characteristic set to ProcessingTime, or did you forget to call DataStream.assignTimestampsAndWatermarks(...)? 解决办法&#xff1a; 时间窗口事件选择此方法&#xff0c;Time导包也需要…

多个字段条件相同进行分组并过滤拼装SQL

select posts,term,user_name,GROUP_CONCAT(put_department) put_dept from hrbp_info group by posts,term,user_name having count(*)>1

一道清华期中考试题(逃)

据出题的jzh老师所说... 求和【问题描述】组合数 C(n,m)是从 n 个物品中取 m 个的方案数。C(n,m)(n!)/(m!(n-m)!)斐波那契数列 F 满足&#xff0c; F[0]F[1]1&#xff0c; n≥2 时 F[n]F[n-1]F[n-2]给出 n&#xff0c;求 C(n,0)F[0]C(n,1)F[1]…C(n,n)F[n]【输入格式】一行一个…

记录docker-Skywalking集成es7异常处理

遇到的问题&#xff1a; es7容器启动成功 skywalking的oap容器启动一直在restart 启动失败 处理过程&#xff1a; 1.docker logs oap容器ID 2.对应处理解决 PUT http://192.168.1.10:9200/_cluster/settings { “transient”: { “cluster”: { “max_shards_per_node”:1…

第十周补做作业

第十周课下补做作业 相关知识点的总结 Comparable接口&#xff1a;如果链表中存放的对象不是字符串数据&#xff0c;那么创建对象的类必须实现Comparable接口&#xff0c;即实现该接口中的方法int compareTo(Object b)来规定对象的大小关系。也就是让待排序对象所在的类实现Com…

PyCharm安装与配置,python的Hello World

1. 访问https://www.jetbrains.com/zh/pycharm/download/download-thanks.html, 下载pycharm 安 装包,点击安装. 2. 用记事本打开hosts文件,Windows系统hosts文件路径为&#xff1a;c:\windows\system32\drivers\etc,将0.0.0.0 account.jetbrains.com添加到hosts文件最后 3.打开…

Linux下从零开始部署和使用Jaeger

最近在折腾Jaeger&#xff0c;Jaeger官网都是介绍如何通过Docker部署&#xff0c;二进制部署文档基本没有&#xff08;已咨询过作者&#xff0c;作者说没文档&#xff01;你参考Docker自己部署好了&#xff01;&#xff01;&#xff01;&#xff09;&#xff0c;所以打算写一篇…

python 全栈开发,Day36(作业讲解(大文件下载以及进度条展示),socket的更多方法介绍,验证客户端链接的合法性hmac,socketserver)...

先来回顾一下昨天的内容 黏包现象粘包现象的成因 &#xff1a;   tcp协议的特点 面向流的 为了保证可靠传输 所以有很多优化的机制   无边界 所有在连接建立的基础上传递的数据之间没有界限   收发消息很有可能不完全相等   缓存机制&#xff0c;导致没发过去的消息会在…

Python中xPath技术和BeautifulSoup的使用

xpath基本知识 XPath语法&#xff1a;使用路径表达式来选取XML或HTML文档中的节点或节点集 路径表达式 nodename:表示选取此节点的所有子节点 / &#xff1a; 表示从根节点选取 // &#xff1a;选择任意位置的某个节点。 . &#xff1a;选取当前节点 .. &#xff1a;选…

div水平垂直居中的六种方法

在平时&#xff0c;我们经常会碰到让一个div框针对某个模块上下左右都居中&#xff08;水平垂直居中&#xff09;&#xff0c;其实针对这种情况&#xff0c;我们有多种方法实现。 方法一: 绝对定位方法&#xff1a;不确定当前div的宽度和高度&#xff0c;采用 transform: trans…