我的要求是读取第一列中非空的Excel表的所有行,是数字并且长度介于15和20之间。通过OledbCommand在Excel表的第一列中检索非空行
例如:
358218033354974
359473035499561
358218036156129
354022038366247
358218032490035
359473030516492
040325399
此列可能有一个非数字的标题,并且可能有空行。这会通过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之间的值
编辑:如果有人能告诉我如何跳过空行,我会很高兴。还是我必须选择整个数据表?由于性能原因,我希望只有一个查询才能做到这一点。
预先感谢您。
我面临类似的问题,我解决它使用从数据表中删除空行。 – Anuraj 2011-02-04 09:44:42