如有转载的请注明出处!蟹蟹

1.1使用对象连接OLE DB 数据源

OLE DB 数据源包含具有OLE DB 驱动程序的任何数据源,如SQL Server、Access、Excel、Oracle等。

OLE DB 数据源连接字符串必须提供provide属性及其值。

语法格式为

  1. OleDbConnection mycon = new OleDbConnection(provider=提供者;DataSource=“文件路径”);

 下面以一个案列学习一下

(1)使用OleDb方式读取Excel里的数据,并将Excel里的数据导入SqlServer数据库里

 新建一个空白网站命名DataBindDemo,添加一个web窗体命名为ReadExcel.aspx;添加一个ASP.NET文件夹里的App_Data文件用来存放Excel表;

添加一个OleDBHelper.cs,OleDB数据源操作类这样会简化一些重复的操作(这里没用到,但可以为日后用提供方便),你只需要把他引入到你的后

台代码里就行了,很方便实用。

1.ReadExcel.aspx

  1. <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ReadExcel.aspx.cs" Inherits="DataBindDemo.ReadExcel" %>
  2.  
  3. <!DOCTYPE html>
  4.  
  5. <html xmlns="http://www.w3.org/1999/xhtml">
  6. <head runat="server">
  7. <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  8. <title></title>
  9. </head>
  10. <body>
  11. <form id="form1" runat="server">
  12. <div>
  13.  
  14. <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="导入" />
  15.  
  16. </div>
  17. </form>
  18. </body>
  19. </html>

2.ReadExcel.aspx.cs后台代码

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using System.Web.UI;
  6. using System.Web.UI.WebControls;
  7. using System.Data.OleDb;
  8. using System.Data;
  9. using System.Data.SqlClient;
  10.  
  11. namespace DataBindDemo
  12. {
  13. public partial class ReadExcel : System.Web.UI.Page
  14. {
  15. protected void Page_Load(object sender, EventArgs e)
  16. {
  17. string strConn = string.Format(@"Provider=Microsoft.Jet.Oledb.4.0;
  18. Data Source={0};Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;'",
  19. "|DataDirectory|test.xls");
  20. /*相当于连接字符串
  21. 后面那个是Excel标的相对路径一定要写对,不过这里也可以改成绝对路径;直接访问你的电脑上的表,
  22. 路径要写对,例如:Data Source=D:/test.xls;
  23. 针对如果上连接字符串 对相关属性进行说明如下:"HDR=Yes;”指示第一行中包含列名,
  24. 而不是数据,"IMEX=1;”通知驱动程序始终将“互混”数据列作为文本读取。
  25. Excel 8.0 针对Excel2000及以上版本,Excel5.0 针对Excel97。*/
  26. OleDbConnection conn = new OleDbConnection(strConn); //连接上Excel表
  27. try//进行异常处理
  28. {
  29. conn.Open();
  30. OleDbDataAdapter adapter = new OleDbDataAdapter("select * from [stuInfo$]",conn); //执行sql语句,找到表名为stuInfo的表
  31. DataTable dt = new DataTable();//创建一个存储数据的表
  32. adapter.Fill(dt);//将数据填充到datatable中
  33. this.Session["dt"] = dt;//将数据存储在网站
  34. Response.Write(dt.Rows[]["stuNO"]+":"+dt.Rows[]["stuName"]);//这样写是一行一行的输出,这里的["stuNO"]要跟Excel表中的对应
  35. Response.Write(dt.Rows[]["stuNO"] + ":" + dt.Rows[]["stuName"]);
  36. Response.Write(dt.Rows[]["stuNO"] + ":" + dt.Rows[]["stuName"]);
  37. conn.Close();
  38. }
  39. catch(Exception ex)
  40. {
  41. Response.Write(ex.Message);
  42. }
  43. }
  44. //加载到数据库里
  45. protected void Button1_Click(object sender, EventArgs e)
  46. {
  47. DataTable dt = this.Session["dt"] as DataTable;//调用在网站几Session存储的数据
  48. string strConn = "Data Source=.;Initial Catalog=Ole_Dbo;User ID=;Password=";//连接自己的sqlserver数据库
  49. SqlConnection conn = new SqlConnection(strConn);
  50. try
  51. {
  52. conn.Open();
  53. SqlBulkCopy bulk = new SqlBulkCopy(conn); //批量加载
  54. bulk.DestinationTableName = "stuInfo"; //服务器目标表(数据库)表名
  55. bulk.BatchSize = dt.Rows.Count; //每一批次中的行数
  56. bulk.ColumnMappings.Add("stuNO", "stuNO"); //数据源中表的列名与目标表中的列名的对应关系
  57. bulk.ColumnMappings.Add("stuName", "stuName");
  58. bulk.WriteToServer(dt); //将DataTable 表中的数据复制到目标表中
  59. conn.Close();
  60. }
  61. catch (Exception ex)
  62. {
  63. Response.Write(ex.Message);
  64. }
  65. }
  66. }
  67. }

     到这步已经可以读取表中的数据了

将Excel表里的数据加载到数据库中

在页面里加一个按钮并设置按钮事件,代码.ReadExcel.aspx.cs里的按钮事件

在数据库上创建一个表

在代码里连接好自己的数据库,代码已经在按钮事件当中

运行ReadExcel.aspx,点击导入按钮,这时数据就导入到数据库表中了

强调:表中一定要设置主键,如果不设置的话,点击多次按钮,会在表中添加重复记录

  3.OleDBHelper.cs类(可以以后作为备用)

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Data;
  6. using System.Data.OleDb;
  7.  
  8. namespace DataBindDemo.DBHelper
  9. {
  10. /// <summary>
  11. /// OleDB数据源操作类
  12. /// </summary>
  13. public class OleDBHelper
  14. {
  15. private string strConn;
  16. private OleDbConnection conn = null;
  17. /// <summary>
  18. /// 构造数据源操作类
  19. /// </summary>
  20. /// <param name="sourceName">数据源文件名</param>
  21. public OleDBHelper(string sourceName)
  22. {
  23. if (sourceName != "")
  24. {
  25. strConn = string.Format("Provider=Microsoft.Jet.Oledb.4.0;Data Source={0};Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;'",sourceName);
  26. conn = new OleDbConnection(strConn);
  27. }
  28. }
  29. private void OpenConn()
  30. {
  31. if (conn != null && conn.State == ConnectionState.Closed)
  32. {
  33. conn.Open();
  34. }
  35. }
  36. private void CloseConn()
  37. {
  38. if (conn != null && conn.State == ConnectionState.Open)
  39. {
  40. conn.Close();
  41. }
  42. }
  43. private OleDbCommand CreateCommand(string cmdText, string[] param, object[] values)
  44. {
  45. OleDbCommand myCmd = new OleDbCommand(cmdText, conn);
  46. for (int i = 0; i < param.Length; i++)
  47. {
  48. myCmd.Parameters.AddWithValue(param[i], values[i]);
  49. }
  50. return myCmd;
  51. }
  52. /// <summary>
  53. /// 根据命令语句返回数据集
  54. /// </summary>
  55. /// <param name="cmdText">命令语句</param>
  56. /// <param name="param">参数数组,若没有参数可以设置为空</param>
  57. /// <param name="values">参数值数组,只有当param不为空时有效</param>
  58. /// <returns></returns>
  59. public DataTable FillDataTable(string cmdText, string[] param, object[] values)
  60. {
  61. OpenConn();
  62. OleDbCommand cmd;
  63. if (param != null)
  64. {
  65. cmd = CreateCommand(cmdText, param, values);
  66. }
  67. else
  68. {
  69. cmd = new OleDbCommand(cmdText, conn);
  70. }
  71. OleDbDataAdapter adapter = new OleDbDataAdapter(cmd);
  72. DataTable dt = new DataTable();
  73. adapter.Fill(dt);
  74. CloseConn();
  75. return dt;
  76. }
  77. }
  78. }

  诶终于结束了!!累死小编了,这该死的程序员

如果你觉得不错的话,打赏一下小编吧

使用ADO.NET操作数据库的更多相关文章

  1. Asp.Net Core 2.0 项目实战(4)ADO.NET操作数据库封装、 EF Core操作及实例

    Asp.Net Core 2.0 项目实战(1) NCMVC开源下载了 Asp.Net Core 2.0 项目实战(2)NCMVC一个基于Net Core2.0搭建的角色权限管理开发框架 Asp.Ne ...

  2. Win10 64位系统ADO方式操作数据库失败解决方法

    VC操作Access数据库一般通过ODBC.ADO.DAO等方式,但在我的Win10 64位操作系统中,通过ADO方式操作数据库会失败,无法读取数据.解决方法:1.首先确保Win10操作系统ado目录 ...

  3. ADO.Net操作数据库的方式

    1.使用数据提供程序执行sql或者ddl语句操作数据库. 2.使用oledb操作数据库 3.使用odbc操作数据库 4.使用DataSet操作数据库 前面3种方式都无法避免要使用sql语句,对不同种类 ...

  4. ADO.net操作数据库

    今天整理硬盘,发现2年前开始着手开始学习C#的学习日记.陆续整理,一是自己的知识梳理梳理,二是希望与大家多多交流,能给初学者带来一定帮助,当然是更高兴的啦. 断线对象 另一类是与数据源无关的断线对象, ...

  5. ADO.NET操作数据库(一)

    ---恢复内容开始--- [1]ADO.Net简介2015-12-07-20:16:05 ADO.Net提供对Microsoft SQL Server数据源以及通过OLE DB和XML公开的数据源的一 ...

  6. ADO.NET 操作数据库 --- 01 简单封装

    由于我是Java转的C#开始的时候就用的NHihernate,和EF 对ADO.NET使用较少,现在封装一个ADO.NET的工具类来实现数据库的操作,比较简单,望大家多多提意见. 如果大家有什么学习中 ...

  7. C# ADO.NET操作数据库 SqlHelp.cs类

    刚开始练习ADONET的时候,练习的一个SQLHelp.cs  数据库操作类,很简单,但是也很实用 using System; using System.Collections.Generic; us ...

  8. MFC,ADO方式实现数据库操作

    参考: MSDN数据访问编程 (MFC/ATL): https://msdn.microsoft.com/zh-cn/library/kd4ck1tt.aspx?f=255&MSPPError ...

  9. 就这么 来ADO.net类操作数据库

    使用ADO.net操作数据库其实也是很简单,而且使用频率蛮高的一种方式.话不多说,上代码才更容易理解. 首先,先要引入数据库操作相关的命名空间,这样才能使用下面的代码 //数据库连接引用的命名空间 u ...

随机推荐

  1. 9.1、Libgdx的输入处理的配置和查询

    (官网:www.libgdx.cn) 有时判断是否支持输入设备是必要的.通常你的游戏不需要支持所有的输入设备.比如你可能不需要加速度计或者罗盘.这时我们需要禁用这些设备保持电量.接下来将教你怎样做. ...

  2. Dynamics CRM ADFS及IFD部署后延长系统注销时间

    Dynamics CRM 部署IFD后,一段时间后登陆状态会失效,系统会提示让你重新登陆,可以通过延长失效时间来规避 在 powershell中执行如下指令 Set-ADFSRelyingPartyT ...

  3. 《java入门第一季》之Random类和获取随机数案例

    /*  * Random:产生随机数的类  *   * 构造方法:  * public Random():没有给种子,用的是默认种子,是当前时间的毫秒值下的随机数,所以会一直变化  * public ...

  4. Android Studio下使用NDK的流程

    我要重新拿回持之以恒徽章!! 老规矩,先说看能学会什么:ANDROID STUDIO下NDK的使用方法.JNI的基本使用方法,C语言调用JAVA的方法. 首先要下载NDK,如果你没有VPN可以来htt ...

  5. 《java入门第一季》之面向对象(代码块一网打尽)

    上一篇里面对代码块做出介绍,这里给出一个面试题,加深印象. 如有毁三观的地方,请见谅.拒绝黄赌毒 写程序的执行结果. class Student { static { System.out.print ...

  6. LeetCode之“动态规划”:Climbing Stairs

    题目链接 题目要求 You are climbing a stair case. It takes n steps to reach to the top. Each time you can eit ...

  7. C语言之linux内核实现位数高低位互换

    linux内核实在是博大精深,有很多优秀的算法,我之前在工作中就遇到过位数高低位交换的问题,那时候对于C语言还不是很熟练,想了很久才写出来.最近在看内核的时候看到有内核的工程师实现了这样的算法,和我之 ...

  8. C++实现双链表

    #include <iostream> using namespace std ; #define NR(x) (sizeof(x)/sizeof(x[0])) class node { ...

  9. obj-c编程10:Foundation库中类的使用(6)[线程和操作队列]

    任何语言都不能避而不谈线程这个东东,虽然他是和平台相关的鸟,虽说unix哲学比较讨厌线程的说...线程不是万能灵药,但有些场合还是需要的.谈到线程就不得不考虑同步和死锁问题,见如下代码: #impor ...

  10. 解决idea的项目启动报404的问题

    最近在学习IDEA,由于之前一直使用的是Eclipse,所以初次接触IDEA就接触到了不少的坑,其中最让人头疼的大概就是如何让IDEA顺利的启动起来了,这方面我就不细讲了,网上已经有了不少的教程,稍后 ...