首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从函数返回OleDbDataReader

从函数返回OleDbDataReader
EN

Stack Overflow用户
提问于 2013-10-15 15:12:12
回答 1查看 354关注 0票数 1

我正在尝试从函数返回OleDbDataReader。我在网上搜索,我找到了一些帮助,我创建了一个代码

代码语言:javascript
复制
public IEnumerable<IDataRecord> ImportXLS(string path)
       {

           string connString = "";
           string strFileType = ".xlsx";

           if (strFileType.Trim() == ".xls")
           {
               connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + path + ";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=2\"";
           }
           else if (strFileType.Trim() == ".xlsx")
           {
               connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties=\"Excel 12.0;HDR=Yes;IMEX=2\"";
           }

           string query = "SELECT * FROM [Sheet1$]";

           OleDbConnection conn = new OleDbConnection(connString);
           conn.Open();
           OleDbCommand cmd = new OleDbCommand(query, conn);

           using (IDataReader xlsReader = cmd.ExecuteReader())
           {
               while (xlsReader.Read())
               {
                   yield return (IDataReader)xlsReader;
               }
           }

           conn.Close();
       }

这是可以的--它返回xlsReader,并且我试图通过

代码语言:javascript
复制
public string UploadFile(string tPath, string FileName)
    {
        string msg = "";

        FileImportModule.FileImport OFileImport = new FileImportModule.FileImport();
        SqlDataReader reader = (SqlDataReader)OFileImport.ImportXLS(tPath);            
        var context = new MountSinaiEntities1();

        string tableName = context.Tables.Find(1).tableName;
        var tableFieldList = from a in context.TablesFields                        
                             where a.tableId == 1
                             select a.fieldName;     

        //1- SQL Bulk Copy
        try
        {
            SqlConnection con = new SqlConnection(@"Data Source=abhishek-pc;Initial Catalog=MountSinai;User ID=sa;Password=abhi");
            con.Open();
            SqlBulkCopy bulkcopy = new SqlBulkCopy(con);
            {
                bulkcopy.DestinationTableName = tableName;
                bulkcopy.WriteToServer(reader);
            }
            con.Close();
        }
        catch (Exception e)
        {
           //Handle Exception
        }
   }

但是这个错误会发生

无法将“d__0”类型的对象强制转换为“System.Data.SqlClient.SqlDataReader”类型

解决这个问题的办法是什么?用它作为读者对象的任何选择..。

EN

回答 1

Stack Overflow用户

发布于 2013-10-15 15:17:43

您正在返回一种类型的IEnumerable<IDataRecord>,因此不能将其转换为SqlDataReader

只要返回xlsReader (确保正确地释放它),如果这是您想要的。否则,只需使用您要返回的数据。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19384823

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档