2010-08-27 2 views
0

Im чтение файла XLSX в БД, чтобы сделать некоторую работучтения дб, как весь текст

я заметил, что его чтение некоторых feilds в качестве ИНТ и дату, даже если я просто хочу, чтобы все это прийти в виде текста. есть ли способ переопределить эту функцию?

Код ниже

(не стесняйтесь указать на что-нибудь я мог бы делать лучше с моим кодом, а)

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

' Добавить (апостроф) перед каждым значением ячейки. Это скажет Excel «Рассматривать это как текст, даже если он выглядит как число/дата/независимо».

Не то, что вы хотите? Тогда не используйте разъем DB, потому что он сильно сломан. Вы заметите, что когда у вас есть столбец с смешанными ячейками. В этом случае драйвер БД будет смотреть на первые 8 строк и задавать тип большинству типов, которые он находит, и возвращать NULL для чего-либо в этом столбце, который не подходит. You can fix that путем взлома реестра.

Вместо этого используйте OLE API, чтобы открыть Рабочую книгу, а затем начать с нее, считывая строки за строкой, преобразовывая данные по мере необходимости (этот long list of posts должен содержать все возможные способы доступа к Excel из C# плюс все ошибки и проблемы вы можете столкнуться).

+0

ли вы хороший пример старого api для чтения xls или xlsx? – Crash893

+0

Здесь вы можете найти API Excel: http://msdn.microsoft.com/en-us/library/aa209782(office.10).aspx PS: Это OLE, а не «старый» :-) –

Смежные вопросы