代码之家  ›  专栏  ›  技术社区  ›  Crash893

将数据库读取为所有文本

  •  0
  • Crash893  · 技术社区  · 16 年前

    我读一个XLSX文件作为数据库来做一些工作

    我注意到它读到了一些虚假的int和date,尽管我只是希望所有的内容都以文本的形式出现。是否仍要覆盖此功能?

    下面的代码

    (请随意指出我在代码方面可以做得更好的任何事情)

      private DataSet ExceltoDT(OpenFileDialog dialog)
        {
            try
            {
                string connst = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + dialog.FileName + ";Extended Properties=\"Excel 12.0 Xml;HDR=NO\";";
                string sheet = "Sheet1$";
                string strSQL = "SELECT * FROM [" + sheet + "]";
                //string Table = "081710";
                OleDbConnection xlsdb = new OleDbConnection(connst);
                xlsdb.Open();
                OleDbDataAdapter adp = new OleDbDataAdapter(strSQL, xlsdb);
                DataSet ds2 = new DataSet();
                adp.Fill(ds2);
    
    
                adp.Dispose();
                xlsdb.Close();
                xlsdb.Dispose();
    
                return ds2;
            }
            catch (StackOverflowException stack_ex2)
            {
                MessageBox.Show("(2007 Excel file) Stack Overflowed!" + "\n" + stack_ex2.Message);
                return null;
    
            }
            catch (OleDbException ex_oledb2)
            {
                MessageBox.Show("An OleDb Error Thrown!" + "\n" + ex_oledb2.Message);
                return null;
            }
        }
    
    1 回复  |  直到 16 年前
        1
  •  1
  •   Aaron Digulla    16 年前

    添加一个 ' (撇号)在每个单元格值前面。这将告诉Excel“即使它看起来像数字/日期/任何东西,也要将其视为文本”。

    不是你想要的?然后不要使用DB连接器,因为它已经严重损坏。当列中的单元格混合时,您会注意到这一点。在这种情况下,db驱动程序将查看前8行,并将类型设置为它找到的大多数类型,并为该列中不适合的任何内容返回空值。 You can fix that 侵入你的注册系统。

    相反,使用OLE API打开工作簿,然后从那里开始,逐行读取,根据需要转换数据(这 long list of posts 应该包含从C访问Excel的所有可能方法,以及您可能遇到的所有错误和问题)。

    推荐文章