2013-05-10 84 views
-1

我嘗試閱讀在C#中的.xls蒼蠅。 如果第一個數據列是文本,則表示DBNull.Value =true。 但是,如果它的數量是確定的。 那麼我如何閱讀文本?閱讀文字在C#

這是我的代碼:

OleDbCommand command = new OleDbCommand("Select [Id], [Name], [Email] from [sheet$]", connection); 

OleDbDataAdapter objAdapter = new OleDbDataAdapter(); 
objAdapter .SelectCommand = command; 

DataSet objDataset = new DataSet(); 

objAdapter .Fill(objDataset1); 
DataView dv = objDataset .Tables[0].DefaultView; 

for (int i = 0; i < dv.Count; i++) 
{ 
    if (dv[i][0] != DBNull.Value) // problem is here.... if the first column is text then it true. I want to tead text as well. 
    { 
    } 
} 
+1

。你遇到的問題究竟是什麼? – 2013-05-10 06:51:01

+0

如果第一列輸入它測試它說DBNull.Value = true。所以我想閱讀這個列,如果它是類型是文本。 – user1348351 2013-05-10 07:05:41

+0

你的意思是你想測試它是否是一個字符串,然後使用該值,如果它是? – 2013-05-10 07:10:02

回答

2

嘗試:

string dval = dv[i][0] as string; 
if(dval != null) 
{ 
    //use string 

使用的字符串,你將不得不調用ToString()方法。即:

dv[i][0].ToString() 
0
  1. 對於支票的DBNull使用Convert.IsDBNull(object)方法。
  2. 爲了讀取值作爲文本,使用Convert.ToString(object, IFormatProvider)方法或類型轉換。

即可能是你需要下一件東西:

if(!Convert.IsDBNull(dv[i][0])) {… 
// or 
var text = Convert.ToString(dv[i][0], CultureInfo.CurentCulture); 
if(!String.IsNullOrEmpty(text)) {… 
// or 
var text = dv[i][0] as string; 
if(text != null) {… 

取決於你的需要。

+0

如果第一列類型測試它說DBNull.Value = true。所以我想閱讀這個列,如果它是類型是文本。 – user1348351 2013-05-10 07:06:11

0

你限於用OleDbDataAdapter或者是你可以用到其他庫?如果你可以,你可能想要給linqtoexcel一個去。我發現它更容易使用,因爲我是linq的忠實粉絲。它可以從上面的鏈接獲得,但是它也可以在nuget上找到。

這是那種語法的你會使用:

var excel = new ExcelQueryFactory("excelFileName"); 
var indianaCompanies = from c in excel.Worksheet() 
         where c["State"] == "IN" || c.Zip == 46550 
         select c; 

,你有一個電子表格程序叫excelFileName和你想要的數據是第一個工作表上,您再選擇任何行,其中State列(列名假定在第一行)等於INZip列= 46550。他們與負載更多的例子你的問題不是很清楚維基頁面上here