2013-10-24 115 views
0

我正在上传一个Excel工作表,并希望将其数据移动到数据库中的另一个表。最近两天我得到一个错误(System.Data.OleDb.OleDbException invalid argument),但是,如果我设计一个非常简单的应用程序,它工作正常。请帮我System.Data.OleDb.OleDbException无效的参数

 
Using conn As New SqlConnection(ConfigurationManager.ConnectionStrings("TERAMSConnectionString").ConnectionString) 
      Dim path As String = FileUpload1.PostedFile.FileName 
      Dim excelConnectionString As String = ("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + (path + ";Extended Properties=Excel 12.0;Persist Security Info=False")) 
      Dim excelConnection As OleDbConnection = New OleDbConnection(excelConnectionString) 
      conn.Open() 
      excelConnection.Open() 
      Dim cmd As OleDbCommand = New OleDbCommand("Select * from [Sheet1$]", excelConnection) 
      'Clears any previous data 
      Dim sClearSQL = "DELETE FROM Desktop_Compare " 
      Dim SqlCmd As SqlCommand = New SqlCommand(sClearSQL, conn) 
      SqlCmd.ExecuteNonQuery() 
      Dim dReader As OleDbDataReader = cmd.ExecuteReader 
      Dim sqlBulk As SqlBulkCopy = New SqlBulkCopy(conn) 
      excelConnection.Close() 
      conn.Close() 
     End Using 


Line 74:    Dim excelConnection As OleDbConnection = New OleDbConnection(excelConnectionString) 
Line 75:    conn.Open() 
Line 76:    **excelConnection.Open()** 
Line 77:    Dim cmd As OleDbCommand = New OleDbCommand("Select * from [Sheet1$]", excelConnection) 
Line 78:    'Clears any previous data 
+0

您在哪一点得到异常?作为一个便笺,我会推荐使用'&'来连接字符串而不是'+'(我看到+导致一些奇怪的问题,因为它试图将字符串“添加”到一起而不是连接它们) – Grahamvs

+0

@Grahamvs好的,我得到错误在“excelConnection.Open()”告诉用户代码是未处理的。 – Miank

回答

0

试着改变你的连接字符串:

Dim excelConnectionString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & path & ";" 

如果还是不行,请尝试更改/添加Extended PropertiesPersist Security Info一次一个,因为它似乎无论你是对ACE驱动程序有问题,或者其中一个附加参数导致问题

至于您的用户得到未处理的错误,您可以尝试如下所示:

 Dim excelConnectionString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & path & ";" 

     Using excelConnection As OleDb.OleDbConnection = New OleDb.OleDbConnection(excelConnectionString) 
      Try 
       excelConnection.Open() 

       Using cmd As OleDb.OleDbCommand = New OleDb.OleDbCommand("Select * from [Sheet1$]", excelConnection) 

        'Clears any previous data 
        Dim sClearSQL As String = "DELETE FROM Desktop_Compare " 
        Using SqlCmd As SqlClient.SqlCommand = New SqlClient.SqlCommand(sClearSQL, conn) 
         SqlCmd.ExecuteNonQuery() 
        End Using 

        Dim dReader As OleDb.OleDbDataReader = cmd.ExecuteReader 
        Dim sqlBulk As SqlClient.SqlBulkCopy = New SqlClient.SqlBulkCopy(conn) 
        excelConnection.Close() 

       End Using 

      Catch ex As Exception 
       ' Handle errors here 

      Finally 
       If Not excelConnection.State = ConnectionState.Closed Then 
        Try 
         excelConnection.Close() 
        Catch ex As Exception 
        End Try 
       End If 

      End Try 

     End Using