问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

在C#中如何实现用代码将excel导入到sql数据库中

发布网友 发布时间:2022-04-09 22:17

我来回答

5个回答

懂视网 时间:2022-04-10 02:39

前台相关:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
 <title>上传数据</title>
 <script src="../../../res/js/jquery.js" type="text/javascript"></script>
 <script type="text/javascript">
 $(document).ready(function () {

  //上传按钮对文件格式进行判断
  $(‘#Button_up‘).click(function () {
  var filename = $(‘#FileUpload1‘).val();
  if (filename == ‘‘) {
   alert(‘请上传文件‘);
   return false;
  }
  else {
   var exec = (/[.]/.exec(filename)) ? /[^.]+$/.exec(filename.toLowerCase()) : ‘‘;
   if (!(exec == "xlsx" || exec == "xls")) {
   alert(‘文件格式不正确,请上传excel文件!‘);
   return false;
   }
  }
  return true;
  });
 });
 </script>
</head>
<body>
 <form id="form1" runat="server">
 
 <div style="height:50px;line-height:50px;text-align:center;">
 <asp:FileUpload ID="FileUpload1" runat="server" Height="25px"/>
 <asp:Button ID="Button_up" runat="server" Text="上 传" OnClick="ButtonUpClick" Height="25px" />
 </div>
 </form>
</body>
</html>

 后台

using System.Data;
using System.IO;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using NPOI.HSSF.UserModel;
using System.Data.SqlClient;
using Maticsoft.DBUtility;

 /// <summary>
 /// 将EXCEL文件上传到服务器,并插入数据库
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 protected void ButtonUpClick(object sender, EventArgs e) 
 {
  int id = ConvertHelper.Cint0(hidId.Text);
  if (id == 0) 
  {
  try
  {
   #region 后台对文件格式进行校验
   var filename = this.FileUpload1.FileName;
   if (string.IsNullOrEmpty(filename))
   {
   FineUI.Alert.ShowInParent("请选择上传的文件!", FineUI.MessageBoxIcon.Warning);
   return;
   }
   if (!(filename.IndexOf(".xls") > 0 || filename.IndexOf(".xlsx") > 0))
   {
   FineUI.Alert.ShowInParent("文件格式有误,请上传EXCEL文件", FineUI.MessageBoxIcon.Warning);
   return;
   }
   #endregion

   //上传路径
   string path = Server.MapPath("~/") + "WebManage\BaseTotalWeb\UploadWeb\FileTmp\";

   //将文件保存到临时路径下
   string timeStamp = System.DateTime.Now.ToString("yyyyMMddHHmmssfff");
   string retStr = UpLoadFiles.FileUpload(path, this.FileUpload1, timeStamp);
   if (retStr.Equals("上传失败"))
   {
   FineUI.Alert.ShowInParent("服务忙,请稍后重试", FineUI.MessageBoxIcon.Warning);
   return;
   }

   //获取DataTable
   DataTable dt = this.ExcelToDataTable(path + timeStamp + this.FileUpload1.FileName, true);

   //删除该临时文件
   DirFileHelper.DeleteFile(path + timeStamp + this.FileUpload1.FileName);

   if (dt == null)
   {
   FineUI.Alert.ShowInParent("无法获取文件内容", FineUI.MessageBoxIcon.Error);
   return;
   }

   //上传订单号
   DateTime dtime = System.DateTime.Now;
   string strno ="up"+ BaseTotalBll.GetInstence().NextCheckCard(dtime);

   #region 添加相应的列
   //添加一列upOrderNum 并赋值
   DataColumn dc = new DataColumn("upOrderNum", typeof(string));
   dc.DefaultValue = strno;
   dt.Columns.Add(dc);

   //添加upMan 上传人
   DataColumn dcUpMan = new DataColumn("upMan", typeof(string));
   dcUpMan.DefaultValue = OnlineUsersBll.GetInstence().GetOnlineUsersModel().Manager_LoginName;//获取系统当前用户名
   dt.Columns.Add(dcUpMan);

   //添加isOk 是否使用
   DataColumn dcisOk = new DataColumn("isOk", typeof(int));
   dcisOk.DefaultValue =0;
   dt.Columns.Add(dcisOk);

   //添加cardType 卡类型 0 为设定 1 1年卡 2、2年卡 3、3年卡
   DataColumn dccardType = new DataColumn("cardType", typeof(int));
   dccardType.DefaultValue = 0;
   dt.Columns.Add(dccardType);

   //添加isBegin是否激活
   DataColumn dcisBegin = new DataColumn("isBegin", typeof(int));
   dcisBegin.DefaultValue = 0;
   dt.Columns.Add(dcisBegin);

   //添加isDown 是否导出
   DataColumn dcisDown = new DataColumn("isDown", typeof(int));
   dcisDown.DefaultValue = 0;
   dt.Columns.Add(dcisDown);

   //添加isDel 是否删除
   DataColumn dcisDel = new DataColumn("isDel",typeof(int));
   dcisDel.DefaultValue = 0;
   dt.Columns.Add(dcisDel);

   //添加上传人createMan
   DataColumn dccreateMan = new DataColumn("createMan",typeof(string));
   dccreateMan.DefaultValue = OnlineUsersBll.GetInstence().GetOnlineUsersModel().Manager_LoginName;
   dt.Columns.Add(dccreateMan);
   #endregion
   
   SqlTransaction tran = null;
   using (SqlConnection conn = new SqlConnection(DbHelperSQL.connectionString))
   {
   conn.Open();//打开链接 
   using (tran = conn.BeginTransaction())
   {
    using (SqlBulkCopy copy = new SqlBulkCopy(conn, SqlBulkCopyOptions.KeepIdentity, tran))
    {
    copy.BulkCopyTimeout = 60;
    copy.BatchSize = dt.Rows.Count;
    copy.DestinationTableName = "SLWIFI.dbo.[T_Base_CardList]";

    copy.ColumnMappings.Add("upOrderNum", "upOrderNum");
    copy.ColumnMappings.Add("ICCID号", "cardCTCC");
    copy.ColumnMappings.Add("接入号码", "cardAccess");
    copy.ColumnMappings.Add("upMan", "upMan");
    copy.ColumnMappings.Add("isOk", "isOk");
    copy.ColumnMappings.Add("cardType", "cardType");
    copy.ColumnMappings.Add("isBegin", "isBegin");
    copy.ColumnMappings.Add("isDown", "isDown");
    copy.ColumnMappings.Add("isDel", "isDel");
    copy.ColumnMappings.Add("createMan", "createMan");

    copy.WriteToServer(dt);
    tran.Commit();
    copy.Close();
    }
   }
   conn.Close();
   }

  }
  catch (Exception ex)
  {
   string str = ex.ToString();
   FineUI.Alert.ShowInParent("上传失败", FineUI.MessageBoxIcon.Error);
   return;
  }
  FineUI.Alert.ShowInParent("上传成功", FineUI.MessageBoxIcon.Information);
  return;
  }
 }
 
 /// <summary>
 /// 将excel导入到datatable
 /// </summary>
 /// <param name="filePath">excel路径</param>
 /// <param name="isColumnName">第一行是否是列名</param>
 /// <returns>返回datatable</returns>
 public DataTable ExcelToDataTable(string filePath, bool isColumnName)
 {
  DataTable dataTable = null;
  FileStream fs = null;
  DataColumn column = null;
  DataRow dataRow = null;
  IWorkbook workbook = null;
  ISheet sheet = null;
  IRow row = null;
  ICell cell = null;
  int startRow = 0;
  try
  {
  using (fs = File.OpenRead(filePath))
  {
   // 2007版本
   if (filePath.IndexOf(".xlsx") > 0)
   workbook = new XSSFWorkbook(fs);
   // 2003版本
   else if (filePath.IndexOf(".xls") > 0)
   workbook = new HSSFWorkbook(fs);

   if (workbook != null)
   {
   sheet = workbook.GetSheetAt(0);//读取第一个sheet,当然也可以循环读取每个sheet
   dataTable = new DataTable();
   if (sheet != null)
   {
    int rowCount = sheet.LastRowNum;//总行数
    if (rowCount > 0)
    {
    IRow firstRow = sheet.GetRow(0);//第一行
    int cellCount = firstRow.LastCellNum;//列数

    //构建datatable的列
    if (isColumnName)
    {
     startRow = 1;//如果第一行是列名,则从第二行开始读取
     for (int i = firstRow.FirstCellNum; i < cellCount; ++i)
     {
     cell = firstRow.GetCell(i);
     if (cell != null)
     {
      if (cell.StringCellValue != null)
      {
      column = new DataColumn(cell.StringCellValue);
      dataTable.Columns.Add(column);
      }
     }
     }
    }
    else
    {
     for (int i = firstRow.FirstCellNum; i < cellCount; ++i)
     {
     column = new DataColumn("column" + (i + 1));
     dataTable.Columns.Add(column);
     }
    }

    //填充行
    for (int i = startRow; i <= rowCount; ++i)
    {
     row = sheet.GetRow(i);
     if (row == null) continue;

     dataRow = dataTable.NewRow();
     for (int j = row.FirstCellNum; j < cellCount; ++j)
     {
     cell = row.GetCell(j);
     if (cell == null)
     {
      dataRow[j] = "";
     }
     else
     {
      //CellType(Unknown = -1,Numeric = 0,String = 1,Formula = 2,Blank = 3,Boolean = 4,Error = 5,)
      switch (cell.CellType)
      {
      case CellType.Blank:
       dataRow[j] = "";
       break;
      case CellType.Numeric:
       short format = cell.CellStyle.DataFormat;
       //对时间格式(2015.12.5、2015/12/5、2015-12-5等)的处理
       if (format == 14 || format == 31 || format == 57 || format == 58)
       dataRow[j] = cell.DateCellValue;
       else
       dataRow[j] = cell.NumericCellValue;
       break;
      case CellType.String:
       dataRow[j] = cell.StringCellValue;
       break;
      }
     }
     }
     dataTable.Rows.Add(dataRow);
    }
    }
   }
   }
  }
  return dataTable;
  }
  catch (Exception)
  {
  if (fs != null)
  {
   fs.Close();
  }
  return null;
  }
 } 

 

用NOPI将上传的EXCEL,转换得到DataTable,用SqlBulkCopy将数据写入数据库表中,配置添加默认列及值,对应数据库字段写入数据

标签:class   jquer   summary   creat   stc   head   ice   text   相关   

热心网友 时间:2022-04-09 23:47

1.打开sqlserver 选择数据库 点击右健[所有任务]-[导入数据]
2.按照向导 选择数据源 [micrsoft excel 97-2000] 选择要导入的文件
3.接下来的向导选择要导入到的数据库,该导入支持新建表,和表数据追加都可以,按照向导步骤操作就可以啦!

热心网友 时间:2022-04-10 01:05

/// <summary>
/// 从Excel读取数据
/// </summary>
/// <param name="filePath">路径</param>
/// <returns>DataSet</returns>
public DataSet ImportFromExcel(string filePath)
{
DataSet ds = new DataSet();
string connString = "Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = " + filePath + ";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\"";
DataTable table = OleDbHelper.GetExcelTables(connString);
if(table == null || table.Rows.Count <= 0)
{
return null;
}

foreach(DataRow dr in table.Rows)
{
string cmdText = "select * from [" + dr["TABLE_NAME"].ToString() + "]";
DataTable dt = OleDbHelper.FillDataTable(connString, cmdText);
dt.TableName = dr["TABLE_NAME"].ToString();
ds.Tables.Add(dt);
}

return ds;
}

接下来只要把DataSet写入数据库

热心网友 时间:2022-04-10 02:39

下面是一个我以前写的程序代码,自己看看吧。有什么不懂得就说。
using System.Data.SqlClient;
using System.Data.Common;//use for converting excel file to SQL table by OleDb
using System.Data.OleDb;

private void btnConvert_Click(object sender, EventArgs e)
{
//convert Excel to SQL using OLEDB
string path = txtExcel.Text;

string execelConnectionStr = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=book_edited2.xls;Extended Properties=""Excel 8.0;HDR=YES;""";

using (OleDbConnection conn = new OleDbConnection(execelConnectionStr))
{
OleDbCommand cmd = new OleDbCommand("select Typlabel, Proct,ProdIndex FROM [Sheet1$]", conn);
conn.Open();

using (DbDataReader dr = cmd.ExecuteReader())
{
// SQL Server Connection String
string sqlConnectionString = "Data Source=yy;Initial Catalog=wincorhighpot ;Integrated Security=True";

// Bulk Copy to SQL Server
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(sqlConnectionString))
{
bulkCopy.DestinationTableName = "ModelTable";
bulkCopy.WriteToServer(dr);
}
}
}
MessageBox.Show("Update ModelTable Completed.");
}

热心网友 时间:2022-04-10 04:31

转换吧。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
太和县环球嘉年华港口有限公司怎么样? 为什么抵触相亲? 鸡蛋怎么做好吃家常做法大全 为何抵触相亲 为什么很多人都抵触相亲? 鸡蛋怎么做才营养好吃呢? 怎么可以搞到110电话打过去给别人 植发后能保持多久?有人知道吗? 银联储蓄卡包括什么 怎么让电脑图标变小如何将电脑桌面上软件变小 &quot;亡命之徒&quot;的含义 求纵贯线的《亡命之徒》歌词 哪位能说一下亡命之徒的歌词 可以改变评论别人说说的评论的字体吗 desperado歌曲意思与背景 你觉得《亡命之徒》这首歌想表达一些什么? Desperado 的歌词及中文翻译 亡命之徒歌曲表达了什么 惯纵线的亡命之徒这首歌的歌词有什么含义! 亡命之徒歌词的意义? 办公室里类似秘书啊助理的工作都有什么啊 请问各位高手,“办公室文秘“处英文应该怎么翻译阿,急! 浙江艺术职业学院三位一体自我陈述,三一学院的范文谁有? 冰柜用了5年,现在不冷冻了,怎么了? 浙江大学三位一体面试需要自我介绍吗 谁知道办公室秘书主要是做些什么。 浙江大学三位一体考生个人陈述怎么写 三位一体面试重了怎么办 杭州师范大学三位一体 面试具体形式? 浙江外国语学院三位一体招生自我介绍怎么写?用英语。字数为1500字 有人知道亡命之徒的歌词 程氏显字辈是第几世? 老鹰的单曲desperado中文翻译,及歌词是什么啊!! 我想给儿子起个好名字,姓孟,2014年11月1日18时出生。农历的9月9日。求个好名字。 纵贯线的亡命之徒(出发啦),为什么歌词会是“有一种预感梦的终点是迷宫”? 关于古著 男姓孟女姓沈男孩起名 纵贯线乐队《亡命之徒》(《出发》) 赏析 关于德与孝的名言 提出人性善理论的儒家代表人物是谁? 本人强迫症,必须搞清楚这句话的意思:亡命之徒 纵贯线 不再撩look ki 女孩 姓张 今天上午7点25出生 姓之五行属火 叫什么名字呢? 亡命之徒歌词 姓氏(张)排行(德)要有(水)的偏旁,四个字最好 三星堆3号神树神秘造型初露真颜,三星堆真的是其他文明的遗迹吗? 三星堆事件持续发酵!重现500多件文物,这些文物会对外展示吗? 三星堆博物馆回应商标被抢注:无法全门类注册,对此你怎么看呢? 火神妙钙奶汤圆怎么煮 凉拌活海参海参为什么咬不动啊 Hauswirt/海氏 F50电烤箱好用吗?