【问题标题】:Read excel Data as string from Excel using ODBC使用 ODBC 从 Excel 中以字符串形式读取 excel 数据
【发布时间】:2018-10-18 20:12:05
【问题描述】:

我正在尝试使用 ODBC 将 excel 数据读取到 C# 这是我的代码

 string    lstrFileName = "Sheet1";
            //string strConnString = "Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq="+path+ ";Extensions=asc,csv,tab,txt;Persist Security Info=False";
            string strConnString = "Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};Dbq=E:\\T1.xlsx;Extensions=xls/xlsx;Persist Security Info=False";
            DataTable ds;
            using (OdbcConnection oConn = new OdbcConnection(strConnString))
            {
                using (OdbcCommand oCmd = new OdbcCommand())
                {
                    oCmd.Connection = oConn;

                    oCmd.CommandType = System.Data.CommandType.Text;
                    oCmd.CommandText = "select A   from [" + lstrFileName + "$]";

                    OdbcDataAdapter oAdap = new OdbcDataAdapter();
                    oAdap.SelectCommand = oCmd;

                    ds = new DataTable();
                    oAdap.Fill(ds);
                    oAdap.Dispose();



                    // ds.Dispose();
                }

            }

我的样本数据 一个 1 2 3 AA BB 它的数据表读取 1,2,3 和两个空白行 我可以理解,因为第一行它决定数据类型,但我如何转换为字符串并读取所有行。 任何建议。 我已经尝试过 CStr 但没有帮助。

【问题讨论】:

    标签: c# odbc


    【解决方案1】:

    关于类似问题的先前讨论,请查看以下内容:

    DBNull in non-empty cell when reading Excel file through OleDB

    作为一种解决方法,您也可以将列格式化为“文本”(即在 Excel 中,选择列,右键单击“格式化单元格...”),但如果您要处理大量文件或如果你不能触摸文件..

    【讨论】:

      【解决方案2】:

      这只是部分推测,但是当将 Excel 文档作为数据库读取时,适配器必须对数据类型做出判断,并且通常做得很好。但是,由于 Excel 允许混合数据类型(而数据库不允许),它偶尔会出错。

      我的建议是不要使用数据适配器,而只是将每个字段作为对象类型读取。从那里,您可以轻松地将它们转换为字符串(StringBuilder、ToString() 等),甚至将 TryParse 转换为您怀疑它们应该是的字段,而忽略 ODBC 数据类型。

      这样的东西将是一个样板:

      using (OdbcCommand oCmd = new OdbcCommand())
      {
          oCmd.Connection = oConn;
      
          oCmd.CommandType = System.Data.CommandType.Text;
          oCmd.CommandText = "select A   from [" + lstrFileName + "$]";
      
          using (OdbcDataReader reader = oCmd.ExecuteReader())
          {
              object[] fields = new object[reader.FieldCount];
      
              while (reader.Read())
              {
                  reader.GetValues(fields);
      
                  // do something with fields
              }
          }
      
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-20
        • 1970-01-01
        • 1970-01-01
        • 2019-11-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多