亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

 更新時間: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中每個單元格的值到DataTable中的時候,不管其在Excel單元格時候是什么數(shù)據(jù)類型,賦值到DataTable中都強(qiáng)制轉(zhuǎn)化為字符串類型。

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

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

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

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

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

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

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

這時程序不會報錯,因?yàn)镕1='1540',雖然篩選條件中給的是字符串類型的1540與table不符合,但是系統(tǒng)會自己去轉(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)會自動去轉(zhuǎn)換,此時,由于不能順利轉(zhuǎn)換成數(shù)值型,在篩選到這里的時候,就會拋出異常,Operator= can't perform on System.Double and System.String

我們再看一種情況,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加引號.

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

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

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

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

相關(guān)文章

  • c#自定義泛型類的實(shí)現(xiàn)

    c#自定義泛型類的實(shí)現(xiàn)

    本篇文章是對c#中自定義泛型類的實(shí)現(xiàn)方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C#網(wǎng)絡(luò)編程中常用特性介紹

    C#網(wǎng)絡(luò)編程中常用特性介紹

    這篇文章介紹了C#網(wǎng)絡(luò)編程中常用特性,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-02-02
  • C#無損高質(zhì)量壓縮圖片實(shí)現(xiàn)代碼

    C#無損高質(zhì)量壓縮圖片實(shí)現(xiàn)代碼

    這篇文章主要為大家詳細(xì)介紹了C#無損高質(zhì)量壓縮圖片的實(shí)現(xiàn)代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • WPF實(shí)現(xiàn)控件拖動的示例代碼

    WPF實(shí)現(xiàn)控件拖動的示例代碼

    這篇文章主要介紹了WPF實(shí)現(xiàn)控件拖動的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08
  • linq語法基礎(chǔ)使用示例

    linq語法基礎(chǔ)使用示例

    LINQ語言集成查詢(Language Integrated Query),是在.NET Framework 3.5 中出現(xiàn)的技術(shù),借助于LINQ技術(shù),我們可以使用一種類似SQL的語法來查詢?nèi)魏涡问降臄?shù)據(jù),下面學(xué)習(xí)一下他的使用方法
    2014-01-01
  • .net的序列化與反序列化實(shí)例

    .net的序列化與反序列化實(shí)例

    這篇文章主要介紹了.net的序列化與反序列化實(shí)例,詳細(xì)講述了.net序列化與反序列化的基本原理與用法實(shí)例,具有很好的參考借鑒價值,需要的朋友可以參考下
    2014-10-10
  • 基于C#調(diào)用c++Dll結(jié)構(gòu)體數(shù)組指針的問題詳解

    基于C#調(diào)用c++Dll結(jié)構(gòu)體數(shù)組指針的問題詳解

    下面小編就為大家分享一篇基于C#調(diào)用c++Dll結(jié)構(gòu)體數(shù)組指針的問題詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • C#讀寫文件的方法匯總

    C#讀寫文件的方法匯總

    C#讀寫文件的方法匯總,需要的朋友可以參考一下
    2013-03-03
  • c#?復(fù)寫Equals方法的實(shí)現(xiàn)

    c#?復(fù)寫Equals方法的實(shí)現(xiàn)

    本文主要介紹了c#?復(fù)寫Equals方法的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • WPF TextBox實(shí)現(xiàn)按字節(jié)長度限制輸入功能

    WPF TextBox實(shí)現(xiàn)按字節(jié)長度限制輸入功能

    這篇文章主要為大家詳細(xì)介紹了WPF TextBox實(shí)現(xiàn)按字節(jié)長度限制輸入功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11

最新評論