问题描述
OleDbConnectionoleDBConn=null;OleDbDataAdapterda=null;DataTablem_tableName=newDataTable();;DataSetds=newDataSet();oleDBConn=newOleDbConnection(oleDBConnString);oleDBConn.Open();m_tableName=oleDBConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,null);这段代码的oleDBConn的state为close。这是什么问题呢?我装的WIN8的VS2013
解决方案
本帖最后由 noliner 于 2015-01-10 23:28:16 编辑
解决方案二:
断点运行到那一步呢
解决方案三:
Provider指定的数据驱动版本太低吧才4.0后面的excel是8.0。
解决方案四:
引用1楼moonwrite的回复:
断点运行到那一步呢
断点运行到这步:oleDBConn=newOleDbConnection(oleDBConnString);
解决方案五:
引用2楼smthgdin的回复:
Provider指定的数据驱动版本太低吧才4.0后面的excel是8.0。
完整代码是这样的:publicDataTableLendInDT(stringstrFilePath){if(strFilePath==null){thrownewArgumentNullException("filenamestringisnull!");}if(strFilePath.Length==0){thrownewArgumentException("filenamestringisempty!");}stringoleDBConnString=String.Empty;oleDBConnString="Provider=Microsoft.Jet.OLEDB.4.0;";oleDBConnString+="DataSource=";oleDBConnString+=strFilePath;oleDBConnString+=";ExtendedProperties=Excel8.0;";OleDbConnectionoleDBConn=null;OleDbDataAdapterda=null;DataTablem_tableName=newDataTable();;DataSetds=newDataSet();oleDBConn=newOleDbConnection(oleDBConnString);oleDBConn.Open();m_tableName=oleDBConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,null);if(m_tableName!=null&&m_tableName.Rows.Count>0){m_tableName.TableName=m_tableName.Rows[0]["TABLE_NAME"].ToString();}stringsqlMaster="SELECT*FROM["+m_tableName+"]";da=newOleDbDataAdapter(sqlMaster,oleDBConn);try{da.Fill(ds,"tb");}catch(Exceptionex){thrownewException(ex.ToString());}finally{oleDBConn.Close();oleDBConn.Dispose();da.Dispose();}DataTableresult=ds.Tables["tb"];returnresult;}
解决方案六:
ServerVersion“oleDBConn.ServerVersion”引发了“System.InvalidOperationException”类型的异常是什么原因啊?
解决方案七:
Microsoft.Jet.OLEDB.4.0、ExtendedProperties=Excel8.0,对应excel2003如果你机器装的是office2003以上版本,相应的调整上面两个值。
解决方案八:
你好,我前段时间也遇到过类似的问题。后来使用了aspose.cells.dlltry{ds=Report.GetDataTableFromExecl(phisicalFilePath);}catch(Exceptionex){ShowMessage(Page,"上传失败,请稍后重试!"+ex.Message);return;}publicstaticDataSetGetDataTableFromExecl(stringfilePath){vardsExcel=newDataSet();varwkBook=newWorkbook(filePath);//只取第一个sheetvarwkSheet=wkBook.Worksheets[0];vardtTemp=newDataTable();for(varx=0;x<wkSheet.Cells.MaxDataRow+1;x++){DataRowdRow=null;for(vary=0;y<wkSheet.Cells.MaxDataColumn+1;y++){varvalue=wkSheet.Cells[x,y].StringValue.Trim();//如果是第一行,则当作表头if(x==0){//设置表头vardCol=newDataColumn(value);dtTemp.Columns.Add(dCol);}//非第一行,则为数据行else{//每次循环到第一列时,实例DataRowif(y==0){dRow=dtTemp.NewRow();}//给第Y列赋值if(string.IsNullOrEmpty(value)){dRow[y]=null;}else{dRow[y]=value;}}}if(dRow!=null){dtTemp.Rows.Add(dRow);}}dsExcel.Tables.Add(dtTemp);returndsExcel;}