Excel导入Oracle数据库C#winform完整代码

将execl中的数据导入到数据库中 思路:

先将 execl中的数据 动态的添加到dataset 中 再用for将datarow的对象插入到数据库中! 当然为了 防止出错要用事务!

 

代码如下:

导入命名空间:

using System.Data;
using System.Data.OracleClient;
using System.Text;

完整事例如下:

[c-sharp]  view plain  copy
  1. using System.Data;  
  2. using System.Drawing;  
  3. using System.Text;  
  4. using System.Windows.Forms;  
  5. using System.IO;  
  6. using System.Data.OleDb;  
  7. using System.Data;  
  8. using System.Data.OracleClient;  
  9. using System.Text;  
  10. namespace ExportInfo  
  11. {  
  12.     public partial class Form1 : Form  
  13.     {  
  14.         public Form1()  
  15.         {  
  16.             InitializeComponent();  
  17.         }  
  18.   
  19.         /// <summary>  
  20.         /// 打开对话框  
  21.         /// </summary>  
  22.         /// <param name="sender"></param>  
  23.         /// <param name="e"></param>  
  24.         private void button1_Click(object sender, EventArgs e)  
  25.         {  
  26.             openFileDialog1.Filter = "电子表格(*.xls)|*.xls";  
  27.             openFileDialog1.ShowDialog();//打开对话框  
  28.             this.textBox1.Text = openFileDialog1.FileName;//得到文件=路径+名称  
  29.         }  
  30.   
  31.         /// <summary>  
  32.         /// 点击导入文件到数据库中  
  33.         /// 代云超  
  34.         /// </summary>  
  35.         /// <param name="sender"></param>  
  36.         /// <param name="e"></param>  
  37.         private void button2_Click(object sender, EventArgs e)  
  38.         {  
  39.             try  
  40.             {  
  41.   
  42.                 DataSet ds = ImportExcel(this.textBox1.Text);//将excel的对象先放到ds 中  
  43.                 if (ds != null)  
  44.                 {  
  45.                     if (ds.Tables[0].Rows.Count > 0)//如果ds中是有值的话 执行下面的操作  
  46.                     {  
  47.                         if (ExportInfo(ds))  
  48.                         {  
  49.                             MessageBox.Show("导入数据库成功!");  
  50.                         }  
  51.                         else  
  52.                         {  
  53.                             MessageBox.Show("导入数据库失败!");  
  54.                         }  
  55.                     }  
  56.   
  57.                 }  
  58.             }  
  59.             catch  
  60.             {  
  61.   
  62.                 MessageBox.Show("导入数据库失败 请检查导入文件是否填写正确!");  
  63.             }  
  64.         }  
  65.         /// <summary>  
  66.         /// 导入文件的具体方法  
  67.         /// 代云超  
  68.         /// </summary>  
  69.         /// <param name="file">要导入的文件</param>  
  70.         /// <returns></returns>  
  71.         public static DataSet ImportExcel(string file)  
  72.         {  
  73.             FileInfo fileInfo = new FileInfo(file);  
  74.             if (!fileInfo.Exists) return nullstring strConn = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + file + ";Extended Properties='Excel 8.0;HDR=NO;IMEX=1'";  
  75.             OleDbConnection objConn = new OleDbConnection(strConn);  
  76.             DataSet dsExcel = new DataSet();  
  77.             try  
  78.             {  
  79.                 objConn.Open();  
  80.                 string strSql = "select * from [Sheet1$]";  
  81.                 OleDbDataAdapter odbcExcelDataAdapter = new OleDbDataAdapter(strSql, objConn);  
  82.                 odbcExcelDataAdapter.Fill(dsExcel); return dsExcel;  
  83.             }  
  84.             catch (Exception ex)  
  85.             {  
  86.                 throw ex;  
  87.             }  
  88.         }  
  89.         /// <summary>  
  90.         /// 这是将ds对象导入数据库的方法  
  91.         /// 代云超  
  92.         /// </summary>  
  93.         /// <returns>执行是否成功 如: 成功=true 失败=false</returns>  
  94.         public static bool ExportInfo(DataSet ds)  
  95.         {  
  96.             if (ds != null)  
  97.             {  
  98.                 if (ds.Tables[0].Rows.Count > 0)//如果ds中是有值的话 执行下面的操作  
  99.                 {  
  100.                     return Do(ds);//执行成功  
  101.                 }  
  102.             }  
  103.             return false;//执行失败  
  104.         }  
  105.         public static bool Do(DataSet ds)  
  106.         {  
  107.             OracleConnection conNorthwind = new OracleConnection("Data Source=web1;User Id=UserName;Password=UserPassword;Integrated Security=no;");//链接字符串  
  108.             OracleCommand commandNorthwind = new OracleCommand();  
  109.             try  
  110.             {  
  111.                 conNorthwind.Open();//打开数据库链接  
  112.                 OracleTransaction tranNorthwind = conNorthwind.BeginTransaction();//开始事务  
  113.                 for (int i = 0; i < ds.Tables[0].Rows.Count; i++)  
  114.                 {  
  115.                     DataRow dr = ds.Tables[0].Rows[i];  
  116.                     OracleParameter[] parameters = null;//为了得到插入数据库的参数 定义参数对象 为空  
  117.                     string sql = GetSqlString(dr, out parameters);//执行sql -->用out关键字得到参数 赋到parameters对象上  
  118.                     //插入数据库中  
  119.                     PrepareCommand(commandNorthwind, conNorthwind, tranNorthwind, sql, parameters);  
  120.                     commandNorthwind.ExecuteNonQuery();//执行操作  
  121.                 }  
  122.                 commandNorthwind.Transaction.Commit();//提交事务  
  123.                 conNorthwind.Close();//关闭数据库链接资源  
  124.                 return true;  
  125.             }  
  126.             catch//如果有异常 不一定要捕捉异常 但要rollback事务  
  127.             {  
  128.                 if (commandNorthwind.Transaction != null && conNorthwind != null)  
  129.                 {  
  130.                     commandNorthwind.Transaction.Rollback();//rollback事务  
  131.                     conNorthwind.Close();//关闭数据库链接  
  132.                 }  
  133.                 return false;  
  134.             }  
  135.         }  
  136.         /// <summary>  
  137.         /// 每一行信息插入数据库中  
  138.         /// </summary>  
  139.         /// <param name="dr">要插入的这一行ds-datarow对象</param>  
  140.         /// <returns>sql语句和用out关键字的参数数组对象</returns>  
  141.         public static string GetSqlString(DataRow dr, out OracleParameter[] parameters)  
  142.         {  
  143.             StringBuilder sb = new StringBuilder();  
  144.             sb.Append("INSERT INTO TEXT VALUES(:ID,:NAME)");  
  145.             parameters = new OracleParameter[] { new OracleParameter(":ID", Convert.ToString(dr[0])), new OracleParameter(":NAME", Convert.ToString(dr[1])) };  
  146.             return sb.ToString();//将sqlreturn出去  
  147.         }  
  148.         private static void PrepareCommand(OracleCommand cmd, OracleConnection conn, OracleTransaction trans, string cmdText, OracleParameter[] cmdParms)  
  149.         {  
  150.             PrepareCommand(cmd, conn, trans, cmdText, CommandType.Text, cmdParms);  
  151.         }  
  152.         //参数设定  此方法被重载   
  153.         private static void PrepareCommand(OracleCommand cmd, OracleConnection conn, OracleTransaction trans, string cmdText, CommandType cmdType, OracleParameter[] cmdParms)  
  154.         {  
  155.             if (conn.State != ConnectionState.Open)  
  156.             {  
  157.                 conn.Open();  
  158.             }  
  159.             cmd.Connection = conn;  
  160.             cmd.CommandText = cmdText;  
  161.             if (trans != null)  
  162.             {  
  163.                 cmd.Transaction = trans;  
  164.             }  
  165.             cmd.CommandType = cmdType;  // CommandType.Text;//cmdType;  
  166.             if (cmdParms != null)  
  167.             {  
  168.                 foreach (OracleParameter parameter in cmdParms)  
  169.                 {  
  170.                     if (parameter != null)  
  171.                     {  
  172.                         if (parameter.Value == null)  
  173.                         {  
  174.                             parameter.Value = DBNull.Value;  
  175.                         }  
  176.                         cmd.Parameters.Add(parameter);  
  177.                     }  
  178.                 }  
  179.             }  
  180.         }  
  181.     }  
  182. }  

 在oracle数据库中操作是 建立一个Text表 做测试 字段有:ID varchar2型 Name varchar2型

测试:导入execl表格成功数据库中信息完整.

失败:数据库中信息全无.

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值