2011-03-10 8 views
0

SQL 데이터베이스로 Excel 시트를 가져 오려고합니다. sqlbulkcopy를 사용하여 작동시킬 수있었습니다. 나는 지금 그것을 줄 단위로하려고 노력하고있다. 첫 번째 행만 데이터베이스에 추가된다는 점을 제외하고는 코드가 제대로 작동합니다. msgbox를 사용하여 모든 Excel 값을 반복하도록했습니다. 그래서 나는 무엇이 잘못되었는지 확신하지 못한다.VB import excel from SQL

Imports System.Data 
Imports System.Data.SqlClient 
Imports System.Data.OleDb 
Imports System.IO 
Imports System.Text 

Module Module1 

    Sub Main() 

     Dim strSql As String = "" 
     strSQL = "INSERT INTO tblExcel (Name, Location) VALUES (@Name, @Location)" 

     'SQL Server Connection String 
     Dim cn As New SqlClient.SqlConnection 
     cn.ConnectionString = "Data Source=MyDB;Initial Catalog=DB123;Integrated Security=True" 

     Dim cmd As New SqlClient.SqlCommand 
     cmd.Connection = cn 
     cmd.CommandType = CommandType.Text 
     cmd.CommandText = strSql 

     cn.Open() 

     'Connection String to Excel Workbook 
     Dim excelConnectionString As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Documents and Settings\cl3j\Desktop\ExcelTest.xlsx;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 [Name],[Location] FROM [Sheet1$]", connection) 
      connection.Open() 

      ' Create DbDataReader to Data Worksheet 
      Using dr As System.Data.OleDb.OleDbDataReader = command.ExecuteReader() 

       If dr.HasRows() then 
        While dr.Read() 
         cmd.Parameters.Add("@Name", SqlDbType.VarChar).Value = Convert.ToString(dr.Item("Name")) 
         cmd.Parameters.Add("@Location", SqlDbType.VarChar).Value = Convert.ToString(dr.Item("Location")) 
         cmd.ExecuteScalar() 
        End While 
       End If 

      End Using 

     End Using 

     cn.Close() 
     cn = Nothing 

    End Sub 

End Module 

답변

0

발견. cmd 라인을 dr.hasrows 루프로 이동해야합니다. 다음과 같이 표시됩니다.

   If dr.HasRows() then 
        While dr.Read() 
         Dim cmd As New SqlClient.SqlCommand 
         cmd.Connection = cn 
         cmd.CommandType = CommandType.Text 
         cmd.CommandText = strSql 

         cmd.Parameters.Add("@Name", SqlDbType.VarChar).Value = Convert.ToString(dr.Item("Name")) 
         cmd.Parameters.Add("@Location", SqlDbType.VarChar).Value = Convert.ToString(dr.Item("Location")) 
         cmd.ExecuteScalar() 
        End While 
       End If