2012-06-15 41 views
1

我正在導入Excel表格導入到我的sql數據庫中。一切工作正常,但我想閱讀列標題中的靜態值。不知道如何做到這一點。下面是我使用的讀入紙代碼:導入excel表格時閱讀欄目

'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 
+0

OleDbDataReader沒有途徑知道頁眉(又名列名)。可能是一個OleDbDataAdapter的填充一個DataTable會怎麼做。 – Steve

回答

2

不是一個非常乾淨的代碼,但是這給了頭1(或第1行的名字,你的命名錶的第一列[" & 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 
+0

非常感謝您對H ELP。對不起,代碼不是很好。我自學成才。如果還有其他事情你看到的不是很好,你能告訴你會改變什麼嗎? – Mike

+0

@Mike,我在說我的,不是你的。 – Steve

+0

@Mike,看着你的代碼,我會優化出內部循環中用於更新SqlServer的參數的創建和初始化。這對內存碎片會更快一些,攻擊性更低 – Steve