0

I want to import csv data to sql server. I implemented it with hardcoded file path and file name it works. But when I change it into FileUpload ( file to be choose in browser ) I'm receiving Object variable or With block variable not set. Issue passing table data into CSVInfo datable

File Path in config file

<add key="Contract" value="C:\Test\" />

HTML Markup

<table width="25%" align="center" border="0">
            <tr align="left" >
                <td align="left">
                    <asp:FileUpload ID="FileUpload1" runat="server" />
                </td>
                <td align="right">
                    <asp:button ID="btnbtnUpload" OnClick="FUpload" CssClass="button" runat="server" Width="80" CausesValidation="False" Text="Upload" Visible="True" />
                </td>
            </tr>
        </table>

Import / Upload CSV file data to SQL Server database table

Partial Class Contract
    Inherits System.Web.UI.Page
    Public CSVInfo = New DataTable("CSVInfo")

Public Sub FUpload(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnbtnUpload.Click

If FileUpload1.HasFile Then
            Dim FileName As String = Path.GetFileName(FileUpload1.PostedFile.FileName)
            Dim Extension As String = Path.GetExtension(FileUpload1.PostedFile.FileName)
            Dim FolderPath As String = ConfigurationManager.AppSettings("Contract")


            If Trim(Extension).ToUpper() <> ".CSV" Then
                Notify.ShowError("The uploading file should only be .CSV")
                Exit Sub
            End If

  Dim FilePath As String = (FolderPath + FileName)
            FileUpload1.SaveAs(FilePath)


 **'CSVInfo = GetCsvData("C:\Test\", "Contract.CSV")** hardcoded file path and name which works
       CSVInfo = GetCsvData(FolderPath, FileName)

   For Each row As DataRow In CSVInfo.Rows
                Dim Com As String = row(0).ToString
                Dim Exc As String = row(1).ToString
                Dim ComC As String = row(2).ToString


                Dim structMySQL(3) As OMNIDbOperations.IExecute.structureSQL
                Dim strParaStruc As OMNIDbOperations.IExecute.structureSQLPara
                Dim objErrMsg As New OMNIDbOperations.ErrorMessage

                structMySQL(0).strSQL = "[Insert_Contract]"
                structMySQL(1).strSQL = "@Com,SqlDbType.varchar"
                structMySQL(2).strSQL = "@Exc,SqlDbType.varchar"
                structMySQL(3).strSQL = "@ComC,SqlDbType.varchar"

 Dim myArray As Array = Array.CreateInstance(GetType(String), 1, 4)

                myArray.SetValue(Com, 0, 1)
                myArray.SetValue(Exc, 0, 2)
                myArray.SetValue(ComC, 0, 3)


                Try

                    Dim objDbExe As New OMNIDbOperations.IExecute
                    Dim sSaveMsg
                    strParaStruc = objDbExe.ExecuteInsert(adoFrontCon, structMySQL, myArray)
                    sSaveMsg = strParaStruc.strReturnMsg
                    Dim sStrMsg As String



                Catch ex As Exception
                End Try

            Next


        End If
    End Sub

    Public Function GetCsvData(ByVal strFolderPath As String, ByVal strFileName As String) As DataTable
        Try
            
            Dim strConnString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strFolderPath & ";Extended Properties='text;HDR=Yes;FMT=Delimited;CharacterSet=65001;'"
            Dim conn As New OleDbConnection(strConnString)
            Try
                conn.Open()
                Dim cmd As New OleDbCommand("SELECT * FROM [" & strFileName & "]", conn)
                Dim da As New OleDbDataAdapter()
                da.SelectCommand = cmd
                Dim ds As New DataSet()
                da.Fill(ds)
                da.Dispose()
                Return ds.Tables(0)
            Catch
                Return Nothing
            Finally
                conn.Close()
            End Try
        Catch ex As Exception
        End Try
    End Function

0 Answers0