我的要求是讀取第一列中非空的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