最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#使用oledb讀取excel表格內(nèi)容到datatable的方法

 更新時(shí)間:2015年05月04日 10:38:40   作者:八大山人  
這篇文章主要介紹了C#使用oledb讀取excel表格內(nèi)容到datatable的方法,涉及C#操作oledb及datatable的相關(guān)技巧,需要的朋友可以參考下

本文實(shí)例講述了C#使用oledb讀取excel表格內(nèi)容到datatable的方法。分享給大家供大家參考。具體分析如下:

首先看一段實(shí)例代碼

復(fù)制代碼 代碼如下:
string strCon = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + excel_path + ";Extended Properties='Excel 12.0;HDR=YES;IMEX=1'";
OleDbConnection myConn = new OleDbConnection(strCon);
string strCom = "SELECT * FROM [Part$A7:AK] where [Part No]=10506";
myConn.Open();
OleDbDataAdapter myCommand = new OleDbDataAdapter(strCom, myConn);
DataSet myDataSet = new DataSet();
myCommand.Fill(myDataSet, "Part");
myConn.Close();

IMEX=1的作用是,當(dāng)讀取Excel中每個(gè)單元格的值到DataTable中的時(shí)候,不管其在Excel單元格時(shí)候是什么數(shù)據(jù)類型,賦值到DataTable中都強(qiáng)制轉(zhuǎn)化為字符串類型。

在沒有IMEX=1這個(gè)屬性的時(shí)候,默認(rèn)的是根據(jù)Excel中對(duì)應(yīng)Column的數(shù)據(jù)類型來決定DataTable中Column的數(shù)據(jù)類型。這種情況在Excel中某一列的數(shù)據(jù)類型都是一致的情況下沒有問題,是什么類型,就會(huì)在DataTable中的對(duì)應(yīng)列設(shè)置相應(yīng)的類型。但是如果Excel中這一列的類型混亂的話,比如說既包括數(shù)值型又有字符串型,在運(yùn)行時(shí)創(chuàng)建DataTable的時(shí)候,會(huì)去先判斷Excel中這一列哪種類型的數(shù)據(jù)占主體,然后給DataTable的列設(shè)置為這種類型。比如說,如果一列中既有整數(shù)型又有字符型,而整數(shù)型單元格占主體,這時(shí)DataTable中的列就是整數(shù)型。

這時(shí)又出現(xiàn)另外一個(gè)問題,當(dāng)要把值寫入到DataTable的時(shí)候,如果該單元格符合DataTable中要求的類型,就會(huì)寫入,如果不符合的話,系統(tǒng)會(huì)去強(qiáng)制轉(zhuǎn)換。比如,如果Excel中是字符串的5,而該單元格所在的列整數(shù)型占主體,DataTable中這一列是數(shù)值型,這時(shí),系統(tǒng)會(huì)把字符串的5強(qiáng)制轉(zhuǎn)為數(shù)值型的5然后賦給DataTable相應(yīng)的地方。但是,此時(shí),如果轉(zhuǎn)換有問題的話,比如,此列中有一單元格中是“NO5”,這時(shí)強(qiáng)制轉(zhuǎn)換就會(huì)有問題,系統(tǒng)就會(huì)給DataTable相應(yīng)的地方賦值DBNull,現(xiàn)在如果你用DataGridView來顯示那個(gè)DataTable的時(shí)候,這個(gè)地方顯示出來就是一個(gè)空白的格,但要注意的是,并不是DataTable中的這一行這一列是null,而是DBNull.其實(shí),我覺得,跟null的作用是一樣的,反正在DataGridView中是不會(huì)顯示出來。只是我們?cè)趯懗绦蛉绻枰獙?duì)DataTable的null元素篩選的話,需要注意這個(gè)問題。

如果Excel中,某一行字符串類型占主體的話,那么DataTable中這一列就會(huì)設(shè)置為字符串型,而且任何類型都能順利轉(zhuǎn)換成字符串類型,所以,Excel的類會(huì)完整的顯示出來,不管這一列中的字符串類型的單元格,還是整數(shù)型的單元格,都能完整的顯示出來。這是一很特別的地方。但這僅僅是一個(gè)特例。

所以,如果為了處理的時(shí)候數(shù)據(jù)類型的一致性,如果Excel中數(shù)據(jù)類型混亂的話,可以使用IMEX=1使DataTable中的所有列都轉(zhuǎn)為字符型。

接下來說一個(gè)相關(guān)的問題,那就是DataTable中使用語(yǔ)句進(jìn)行篩選的問題這時(shí)也要注意DataTable中Column的類型問題。在下邊的例子中,F(xiàn)1,F(xiàn)2,F(xiàn)3等都是DataTable的列名。

下邊這個(gè)例子中,F(xiàn)1列是數(shù)值型,F(xiàn)5列是字符串型

DataRow[] rows = table.Select("F1='1540' andF5='NO2'");

這時(shí)程序不會(huì)報(bào)錯(cuò),因?yàn)镕1='1540',雖然篩選條件中給的是字符串類型的1540與table不符合,但是系統(tǒng)會(huì)自己去轉(zhuǎn)換,所以這里寫F1='1540'和F1=1540都是可以的。F5列是字符串型,F(xiàn)5='NO2'也沒問題。

現(xiàn)在我們看另外一種情況,F(xiàn)1列是數(shù)值型,F(xiàn)5列是數(shù)值型.

DataRow[] rows = table.Select("F1='1540' andF5='NO2'");

當(dāng)遇到F5='NO2'后,系統(tǒng)會(huì)自動(dòng)去轉(zhuǎn)換,此時(shí),由于不能順利轉(zhuǎn)換成數(shù)值型,在篩選到這里的時(shí)候,就會(huì)拋出異常,Operator= can't perform on System.Double and System.String

我們?cè)倏匆环N情況,F(xiàn)1列是數(shù)值型,F(xiàn)5列是字符型.

DataRow[] rows = table.Select("F1=1540 andF5='NO2'");

這種情況也是沒問題的,F(xiàn)1=1540,因?yàn)楸旧鞦1就是數(shù)值型,所以不必給1540加引號(hào).

但是, 我們注意一種特殊情況 ,F(xiàn)1列是數(shù)值型,F(xiàn)5列是字符型.

DataRow[] rows = table.Select("F1=1540 and F5=NO2');

這種情況下會(huì)報(bào)錯(cuò),系統(tǒng)不會(huì)自動(dòng)把NO2轉(zhuǎn)換為字符串,而是把Grade2看成一個(gè)列了,系統(tǒng)做的判斷是,這一行的這兩列的單元格值相等,而DataTable中又沒有這個(gè)列名,所以就會(huì)拋出找不到這個(gè)列的異常。所以,當(dāng)某一列為字符串類型時(shí),一定要加上單引號(hào),否則會(huì)有異常拋出。

希望本文所述對(duì)大家的C#程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • C#特性 迭代器(下) yield以及流的延遲計(jì)算

    C#特性 迭代器(下) yield以及流的延遲計(jì)算

    這篇文章主要介紹了C#特性 迭代器(下) yield以及流的延遲計(jì)算,需要的朋友可以參考下
    2014-12-12
  • 利用C#實(shí)現(xiàn)SSLSocket加密通訊的方法詳解

    利用C#實(shí)現(xiàn)SSLSocket加密通訊的方法詳解

    這篇文章主要給大家介紹了關(guān)于如何利用C#實(shí)現(xiàn)SSLSocket加密通訊的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • C#使用DateAndTime.DateDiff實(shí)現(xiàn)計(jì)算年齡

    C#使用DateAndTime.DateDiff實(shí)現(xiàn)計(jì)算年齡

    這篇文章主要為大家詳細(xì)介紹了C#如何使用DateAndTime.DateDiff實(shí)現(xiàn)根據(jù)生日計(jì)算年齡,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2024-01-01
  • C#執(zhí)行DOS命令的方法

    C#執(zhí)行DOS命令的方法

    這篇文章主要介紹了C#執(zhí)行DOS命令的方法,涉及針對(duì)進(jìn)程的調(diào)用以及系統(tǒng)DOS命令的使用,具有不錯(cuò)的實(shí)用價(jià)值,需要的朋友可以參考下
    2014-11-11
  • C#滾動(dòng)字幕的實(shí)現(xiàn)方法

    C#滾動(dòng)字幕的實(shí)現(xiàn)方法

    這篇文章主要介紹了C#滾動(dòng)字幕的實(shí)現(xiàn)方法,主要講述了Graphics.DrawString函數(shù)的應(yīng)用方法,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2014-10-10
  • Unity技術(shù)手冊(cè)之Toggle切換使用實(shí)例

    Unity技術(shù)手冊(cè)之Toggle切換使用實(shí)例

    這篇文章主要為大家介紹了Unity技術(shù)手冊(cè)之Toggle切換使用實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • 基于C#模擬實(shí)現(xiàn)回合制游戲

    基于C#模擬實(shí)現(xiàn)回合制游戲

    這篇文章主要介紹了通過C#模擬實(shí)現(xiàn)回合制游戲,文中的示例代碼講解詳細(xì),對(duì)我們的學(xué)習(xí)和工作有一定的幫助,感興趣的可以跟隨小編一起學(xué)習(xí)一下
    2021-12-12
  • 基于C#實(shí)現(xiàn)亂碼視頻效果

    基于C#實(shí)現(xiàn)亂碼視頻效果

    亂碼視頻效果可能很多人都在抖音看到過,即把一個(gè)短視頻,轉(zhuǎn)成數(shù)字、字母等亂碼組成的形式進(jìn)行播放。本文將用C#實(shí)現(xiàn)一下這一效果,感興趣的可以了解一下
    2023-01-01
  • C#中定時(shí)任務(wù)被阻塞問題的解決方法

    C#中定時(shí)任務(wù)被阻塞問題的解決方法

    這篇文章主要給大家介紹了關(guān)于C#中定時(shí)任務(wù)被阻塞問題的解決方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用c#具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2021-11-11
  • C#使用HttpWebRequest重定向方法詳解

    C#使用HttpWebRequest重定向方法詳解

    在本篇內(nèi)容里小編給讀者們整理了關(guān)于C#使用HttpWebRequest重定向方法和相關(guān)知識(shí)點(diǎn),需要的朋友們參考下。
    2019-03-03

最新評(píng)論

绩溪县| 荥经县| 宿迁市| 富民县| 饶河县| 莱西市| 图木舒克市| 平果县| 弥勒县| 修文县| 庆城县| 青铜峡市| 平顺县| 文安县| 新乐市| 于田县| 绥德县| 安岳县| 平原县| 铜山县| 交城县| 巫山县| 长泰县| 都昌县| 民和| 哈巴河县| 玛纳斯县| 松滋市| 东港市| 黄龙县| 莲花县| 湾仔区| 确山县| 教育| 泸定县| 图们市| 云龙县| 江阴市| 北海市| 出国| 顺昌县|