zoukankan      html  css  js  c++  java
  • 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);
                        }
                    }
                }
            }
        }
    }

  • 相关阅读:
    Django基础七之Ajax
    Django基础六之ORM中的锁和事务
    Django基础五之django模型层(二)多表操作
    Django基础五之django模型层(一)单表操作
    Django基础四之模板系统
    Django基础三之视图函数
    Django基础二之URL路由系统
    转移博客
    Unity开发一些实用的提高效率的技巧
    2019.2.23VScode的c++配置详细方法
  • 原文地址:https://www.cnblogs.com/llguanli/p/8919101.html
Copyright © 2011-2022 走看看