Мое требование - прочитать все строки таблицы Excel в первом столбце, которые не являются пустыми, имеют числовую длину и длину от 15 до 20.
Например:
358218033354974
359473035499561
358218036156129
354022038366247
358218032490035
359473030516492
353210040325399
В этом столбце может быть не числовой заголовок, и могут быть пустые строки.Это может вызвать исключение при импорте их через SqlBulkCopy.Поэтому я хочу предварительно отфильтровать правильные строки через OleDbCommand.
То, что я пробовал до сих пор, следующее (C # также приветствуется):
Using connection As New OleDbConnection(sExcelConnectionString)
connection.Open()
Dim schemaTable As DataTable = _
connection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, _
New Object() {Nothing, Nothing, Nothing, "TABLE"})
For Each row As DataRow In schemaTable.Rows
'loop every Worksheet
Dim OleDbCmd As OleDbCommand = New OleDbCommand("SELECT * FROM [" & row("TABLE_NAME").ToString & "]", connection)
Dim dr As OleDbDataReader = OleDbCmd.ExecuteReader()
Dim bulkCopy As SqlBulkCopy = New SqlBulkCopy(sSqlConnectionString)
bulkCopy.DestinationTableName = destTable
bulkCopy.WriteToServer(dr)
Next
End Using
Но это вызывает исключение, если есть пустыестроки или формат значения неверен.Итак, мой вопрос:
Q: Как ограничить строки OleDbCommand следующим образом:
- получить только первый столбец каждого листа
- все значения, которые являются числовыми
- пропускать пустые значения
- в идеале только значения длиной от 15 до 20
Редактировать : если бы кто-то мог только показать мне путьКак пропустить пустые строки, я был бы счастлив.Или я должен выбрать все данные?Я надеялся, что это возможно сделать только одним запросом из-за соображений производительности.
Заранее спасибо.