使用ADO.NET操作数据库
如有轉(zhuǎn)載的請(qǐng)注明出處!蟹蟹
1.1使用對(duì)象連接OLE DB 數(shù)據(jù)源
OLE DB 數(shù)據(jù)源包含具有OLE DB 驅(qū)動(dòng)程序的任何數(shù)據(jù)源,如SQL Server、Access、Excel、Oracle等。
OLE DB 數(shù)據(jù)源連接字符串必須提供provide屬性及其值。
語(yǔ)法格式為
OleDbConnection mycon = new OleDbConnection(provider=提供者;DataSource=“文件路徑”);下面以一個(gè)案列學(xué)習(xí)一下
(1)使用OleDb方式讀取Excel里的數(shù)據(jù),并將Excel里的數(shù)據(jù)導(dǎo)入SqlServer數(shù)據(jù)庫(kù)里
新建一個(gè)空白網(wǎng)站命名DataBindDemo,添加一個(gè)web窗體命名為ReadExcel.aspx;添加一個(gè)ASP.NET文件夾里的App_Data文件用來(lái)存放Excel表;
添加一個(gè)OleDBHelper.cs,OleDB數(shù)據(jù)源操作類(lèi)這樣會(huì)簡(jiǎn)化一些重復(fù)的操作(這里沒(méi)用到,但可以為日后用提供方便),你只需要把他引入到你的后
臺(tái)代碼里就行了,很方便實(shí)用。
? ??
1.ReadExcel.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ReadExcel.aspx.cs" Inherits="DataBindDemo.ReadExcel" %><!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/><title></title> </head> <body><form id="form1" runat="server"><div><asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="導(dǎo)入" /></div></form> </body> </html>? ? 2.ReadExcel.aspx.cs后臺(tái)代碼
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Data.OleDb; using System.Data; using System.Data.SqlClient;namespace DataBindDemo {public partial class ReadExcel : System.Web.UI.Page{protected void Page_Load(object sender, EventArgs e){string strConn = string.Format(@"Provider=Microsoft.Jet.Oledb.4.0;Data Source={0};Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;'", "|DataDirectory|test.xls");/*相當(dāng)于連接字符串后面那個(gè)是Excel標(biāo)的相對(duì)路徑一定要寫(xiě)對(duì),不過(guò)這里也可以改成絕對(duì)路徑;直接訪(fǎng)問(wèn)你的電腦上的表,路徑要寫(xiě)對(duì),例如:Data Source=D:/test.xls;針對(duì)如果上連接字符串 對(duì)相關(guān)屬性進(jìn)行說(shuō)明如下:"HDR=Yes;”指示第一行中包含列名,而不是數(shù)據(jù),"IMEX=1;”通知驅(qū)動(dòng)程序始終將“互混”數(shù)據(jù)列作為文本讀取。Excel 8.0 針對(duì)Excel2000及以上版本,Excel5.0 針對(duì)Excel97。*/OleDbConnection conn = new OleDbConnection(strConn); //連接上Excel表try//進(jìn)行異常處理 {conn.Open();OleDbDataAdapter adapter = new OleDbDataAdapter("select * from [stuInfo$]",conn); //執(zhí)行sql語(yǔ)句,找到表名為stuInfo的表DataTable dt = new DataTable();//創(chuàng)建一個(gè)存儲(chǔ)數(shù)據(jù)的表adapter.Fill(dt);//將數(shù)據(jù)填充到datatable中this.Session["dt"] = dt;//將數(shù)據(jù)存儲(chǔ)在網(wǎng)站Response.Write(dt.Rows[0]["stuNO"]+":"+dt.Rows[0]["stuName"]);//這樣寫(xiě)是一行一行的輸出,這里的["stuNO"]要跟Excel表中的對(duì)應(yīng)Response.Write(dt.Rows[1]["stuNO"] + ":" + dt.Rows[1]["stuName"]);Response.Write(dt.Rows[2]["stuNO"] + ":" + dt.Rows[2]["stuName"]);conn.Close();}catch(Exception ex){Response.Write(ex.Message);}}//加載到數(shù)據(jù)庫(kù)里protected void Button1_Click(object sender, EventArgs e){DataTable dt = this.Session["dt"] as DataTable;//調(diào)用在網(wǎng)站幾Session存儲(chǔ)的數(shù)據(jù)string strConn = "Data Source=.;Initial Catalog=Ole_Dbo;User ID=;Password=";//連接自己的sqlserver數(shù)據(jù)庫(kù)SqlConnection conn = new SqlConnection(strConn);try{conn.Open();SqlBulkCopy bulk = new SqlBulkCopy(conn); //批量加載bulk.DestinationTableName = "stuInfo"; //服務(wù)器目標(biāo)表(數(shù)據(jù)庫(kù))表名bulk.BatchSize = dt.Rows.Count; //每一批次中的行數(shù)bulk.ColumnMappings.Add("stuNO", "stuNO"); //數(shù)據(jù)源中表的列名與目標(biāo)表中的列名的對(duì)應(yīng)關(guān)系bulk.ColumnMappings.Add("stuName", "stuName");bulk.WriteToServer(dt); //將DataTable 表中的數(shù)據(jù)復(fù)制到目標(biāo)表中 conn.Close();}catch (Exception ex){Response.Write(ex.Message);}}} }?
? 到這步已經(jīng)可以讀取表中的數(shù)據(jù)了 ? ?
將Excel表里的數(shù)據(jù)加載到數(shù)據(jù)庫(kù)中
在頁(yè)面里加一個(gè)按鈕并設(shè)置按鈕事件,代碼.ReadExcel.aspx.cs里的按鈕事件
在數(shù)據(jù)庫(kù)上創(chuàng)建一個(gè)表
在代碼里連接好自己的數(shù)據(jù)庫(kù),代碼已經(jīng)在按鈕事件當(dāng)中
運(yùn)行ReadExcel.aspx,點(diǎn)擊導(dǎo)入按鈕,這時(shí)數(shù)據(jù)就導(dǎo)入到數(shù)據(jù)庫(kù)表中了
強(qiáng)調(diào):表中一定要設(shè)置主鍵,如果不設(shè)置的話(huà),點(diǎn)擊多次按鈕,會(huì)在表中添加重復(fù)記錄
3.OleDBHelper.cs類(lèi)(可以以后作為備用)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data; using System.Data.OleDb;namespace DataBindDemo.DBHelper {/// <summary>/// OleDB數(shù)據(jù)源操作類(lèi)/// </summary>public class OleDBHelper{private string strConn;private OleDbConnection conn = null;/// <summary>/// 構(gòu)造數(shù)據(jù)源操作類(lèi)/// </summary>/// <param name="sourceName">數(shù)據(jù)源文件名</param>public OleDBHelper(string sourceName){if (sourceName != ""){strConn = string.Format("Provider=Microsoft.Jet.Oledb.4.0;Data Source={0};Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;'",sourceName);conn = new OleDbConnection(strConn);}}private void OpenConn(){if (conn != null && conn.State == ConnectionState.Closed){conn.Open();}}private void CloseConn(){if (conn != null && conn.State == ConnectionState.Open){conn.Close();}}private OleDbCommand CreateCommand(string cmdText, string[] param, object[] values){OleDbCommand myCmd = new OleDbCommand(cmdText, conn);for (int i = 0; i < param.Length; i++){myCmd.Parameters.AddWithValue(param[i], values[i]);}return myCmd;}/// <summary>/// 根據(jù)命令語(yǔ)句返回?cái)?shù)據(jù)集/// </summary>/// <param name="cmdText">命令語(yǔ)句</param>/// <param name="param">參數(shù)數(shù)組,若沒(méi)有參數(shù)可以設(shè)置為空</param>/// <param name="values">參數(shù)值數(shù)組,只有當(dāng)param不為空時(shí)有效</param>/// <returns></returns>public DataTable FillDataTable(string cmdText, string[] param, object[] values){OpenConn();OleDbCommand cmd;if (param != null){cmd = CreateCommand(cmdText, param, values);}else{cmd = new OleDbCommand(cmdText, conn);}OleDbDataAdapter adapter = new OleDbDataAdapter(cmd);DataTable dt = new DataTable();adapter.Fill(dt);CloseConn();return dt;}} }誒終于結(jié)束了!!累死小編了,這該死的程序員
如果你覺(jué)得不錯(cuò)的話(huà),打賞一下小編吧
轉(zhuǎn)載于:https://www.cnblogs.com/kalezhangtao/p/9029430.html
總結(jié)
以上是生活随笔為你收集整理的使用ADO.NET操作数据库的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 在EF中使用SQL执行简单高效的增删查操
- 下一篇: 设计模式--装饰者模式