-1

我尝试在 c# 中阅读 .xls 苍蝇。如果第一个数据列是文本,那么它会显示DBNull.Value =true。但是如果是数字就可以了。那么如何阅读文本呢?

这是我的代码:

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.
    {
    }
}
4

3 回答 3

2

尝试:

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

要使用字符串,您必须调用该ToString()方法。IE:

dv[i][0].ToString()
于 2013-05-10T06:44:12.657 回答
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他们有一个 wiki 页面,在此处加载更多示例

于 2013-05-10T07:57:03.003 回答
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) {…

取决于你需要什么。

于 2013-05-10T06:54:26.843 回答