导入Excel表格时读取列

我正在导入一个Excel表格到我的SQL数据库。 一切工作正常,但我想阅读列标题中的静态值。 不知道如何做到这一点。 这里是我用来阅读工作表中的代码:

'Connection String to Excel Workbook Dim excelConnectionString As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & MyFile & ";Extended Properties=""Excel 12.0;HDR=Yes;""" ' Create Connection to Excel Workbook Using connection As New System.Data.OleDb.OleDbConnection(excelConnectionString) 'List columns you need from the Excel file Dim command As New System.Data.OleDb.OleDbCommand("Select * FROM [" & txtSheetName.Text & "$]", connection) connection.Open() ' Create DbDataReader to Data Worksheet Using dr As System.Data.OleDb.OleDbDataReader = command.ExecuteReader() Dim strSql As String = "" strSql = "INSERT INTO tblMine (" & _ "Header1, Field1, Field2 " & _ ") VALUES (" & _ "Header1, Field1, Field2)" Try If dr.HasRows() Then While dr.Read() If Convert.ToString(dr.Item(1)) <> "" Then Dim cmd As New SqlClient.SqlCommand cmd.Connection = cn cmd.CommandType = CommandType.Text cmd.CommandText = strSql 'DataTable1.Columns[0].ColumnName cmd.Parameters.Add("@Header1", SqlDbType.VarChar).Value = ??? cmd.Parameters.Add("@Field1", SqlDbType.VarChar).Value = Convert.ToString(dr.Item(0)) cmd.Parameters.Add("@Field2", SqlDbType.Int).Value = Convert.ToInt32(dr.Item(1)) cmd.ExecuteScalar() End If End While End If 

不是一个非常干净的代码,但是这给了Header1(或名字第一行,名字的第一列名为[" & txtSheetName.Text & "$]"

 Dim cmd2 As OleDbCommand = New OleDbCommand("SELECT * FROM [" & txtSheetName.Text & "$] where 1=0", connection) Dim da As OleDbDataAdapter = new OleDbDataAdapter(cmd2) Dim dt As DataTable = new DataTable() da.Fill(dt) string header1 = dt.Columns(0).ColumnName 

一点优化

  Dim cmd As New SqlClient.SqlCommand cmd.Connection = cn cmd.CommandType = CommandType.Text cmd.CommandText = strSql cmd.Parameters.AddWithValue("@Header1", header1) ' this is invariant cmd.Parameters.AddWithValue("@Field1", string.Empty) ' this is a dummy value cmd.Parameters.AddWithValue("@Field2", 0) ' this is a dummy value While dr.Read() If Convert.ToString(dr.Item(1)) <> "" Then cmd.Parameters("@Field1").Value = Convert.ToString(dr.Item(0)) cmd.Parameters("@Field2").Value = Convert.ToInt32(dr.Item(1)) cmd.ExecuteScalar() End If End While