• 将Excel数据导入数据库


    Excel如下,这页工作表名叫“线路”

    数据库表如下

      1 using System;
      2 using System.Collections.Generic;
      3 using System.Linq;
      4 using System.Web;
      5 using System.Data;
      6 using System.Data.OleDb;
      7 using System.Configuration;
      8 using System.Data.SqlClient;
      9 
     10 namespace insertData
     11 {
     12     class FileSvr
     13     {
     14         /// <summary>
     15         /// 获取DataRow的真实长度
     16         /// </summary>
     17         /// <param name="dr">DataRow</param>
     18         /// <returns>真实长度</returns>
     19         public int getRowLen(DataRow dr)
     20         {
     21             int i = 0;
     22             for (; i < dr.ItemArray.Length; i++)
     23                 if (dr[i].ToString().Trim() == "") break;
     24             return i;
     25         }
     26         /// <summary>
     27         /// //Excel指定的工作表数据导入Datable
     28         /// </summary>
     29         /// <param name="fileUrl">Excel路径</param>
     30         /// <param name="sheetName">工作表名</param>
     31         /// <returns></returns>
     32         public DataTable getExcelDatatable(string fileUrl, string sheetName)//Excel指定的工作表数据导入Datable
     33         {
     34             //支持.xls和.xlsx,即包括office2010等版本的   HDR=Yes代表第一行是标题,不是数据;
     35             const string cmdText = "Provider=Microsoft.Ace.OleDb.12.0;Data Source={0};Extended Properties='Excel 12.0; HDR=Yes; IMEX=1'";
     36 
     37             DataTable dt = null;
     38             //建立连接
     39             OleDbConnection conn = new OleDbConnection(string.Format(cmdText, fileUrl));
     40             try
     41             {
     42                 //打开连接
     43                 if (conn.State == ConnectionState.Broken || conn.State == ConnectionState.Closed)
     44                 {
     45                     conn.Open();
     46                 }
     47 
     48                 //查询sheet中的数据
     49                 string strSql = "select * from [" + sheetName + "$]";
     50                 OleDbDataAdapter da = new OleDbDataAdapter(strSql, conn);
     51                 DataSet ds = new DataSet();
     52                 da.Fill(ds);
     53                 dt = ds.Tables[0];
     54                 return dt;
     55             }
     56             catch (Exception exc)
     57             {
     58                 throw exc;
     59             }
     60             finally
     61             {
     62                 conn.Close();
     63                 conn.Dispose();
     64             }
     65         }
     66 public void InsertRoute(DataTable dt, string strConnection,int dir)//从DataTable导入数据到数据库
     67         {
     68             int retVal = 0;
     69             int count0 = 0;
     70             int count = 0;
     71             int routeNo;
     72             SqlConnection conn = new SqlConnection(strConnection);
     73             conn.Open();
     74             string strSql;
     75             SqlCommand sqlCmd = new SqlCommand();
     76             sqlCmd.Connection = conn;
     77             sqlCmd.Parameters.Add("@编号", System.Data.SqlDbType.Int, 4);
     78             sqlCmd.Parameters.Add("@线路号", System.Data.SqlDbType.Int, 4);
     79             sqlCmd.Parameters.Add("@行向", System.Data.SqlDbType.Int, 4);
     80             sqlCmd.Parameters.Add("@线路名称", System.Data.SqlDbType.NVarChar, 50);
     81             sqlCmd.Parameters.Add("@始发站点", System.Data.SqlDbType.NVarChar, 50);
     82             sqlCmd.Parameters.Add("@开往方向", System.Data.SqlDbType.NVarChar, 50);
     83             sqlCmd.Parameters.Add("@更新时间", System.Data.SqlDbType.DateTime, 4);
     84             foreach (DataRow dr in dt.Rows)//遍历行数据
     85             {
     86                 strSql= "update 线路 set 线路号=@线路号, 行向=@行向, 线路名称=@线路名称, 始发站点=@始发站点, 开往方向=@开往方向,更新时间=@更新时间 where 编号=@编号";
     87                 sqlCmd.CommandText = strSql;
     88                 routeNo =Convert.ToInt32(dr[0].ToString().Trim());
     89                 sqlCmd.Parameters["@编号"].Value = routeNo+dir*100000;
     90                 sqlCmd.Parameters["@线路号"].Value=routeNo;
     91                 sqlCmd.Parameters["@行向"].Value=dir;
     92                 sqlCmd.Parameters["@线路名称"].Value=routeNo+"";
     93                 sqlCmd.Parameters["@始发站点"].Value=dr[1].ToString();
     94                 sqlCmd.Parameters["@开往方向"].Value=dr[getRowLen(dr)-1].ToString();
     95                 sqlCmd.Parameters["@更新时间"].Value = DateTime.Now;
     96                 retVal = sqlCmd.ExecuteNonQuery();
     97                 if (retVal == 0)
     98                 {
     99                     strSql = @"insert into 线路( 编号, 线路号, 行向, 线路名称, 始发站点, 开往方向, 更新时间) values(@编号,@线路号,@行向,@线路名称,@始发站点,@开往方向,@更新时间)";
    100                     sqlCmd.CommandText = strSql;
    101                     retVal = sqlCmd.ExecuteNonQuery();
    102                     count++;
    103                     Console.WriteLine("插入线路{0}成功!", routeNo);
    104                 }
    105                 else
    106                 {
    107                     count0++;
    108                     Console.WriteLine("更新线路{0}成功!", routeNo);
    109                 }
    110             }
    111             conn.Close();
    112             Console.WriteLine("插入{0}条、更新{1}条线路",count, count0);
    113         }
    114 }
    View Code

    结果如下

  • 相关阅读:
    SDOI2018 旧试题
    JSOI2004 平衡点 / 吊打XXX
    SDOI2017 数字表格
    CQOI2015 选数
    BZOJ2741 【FOTILE模拟赛】L
    BZOJ4103 [Thu Summer Camp 2015]异或运算
    BZOJ3689 异或之
    BZOJ4128 Matrix
    HNOI2006 最短母串问题
    SCOI2013 密码
  • 原文地址:https://www.cnblogs.com/Failbs/p/4170969.html
Copyright © 2020-2023  润新知