为什么我收到此错误:“ExecuteReader:Connection属性尚未初始化。”

时间:2012-06-11 15:10:31

标签: asp.net

我正在尝试读取.csv文件以将其内容导入SQL表

我收到错误:

ExecuteReader: Connection property has not been initialized.

在此代码的最后一行:

Function ImportData(ByVal FU As FileUpload, ByVal filename As String, ByVal tablename As String) As Boolean
Try

    Dim xConnStr As String = "Driver={Microsoft Text Driver (*.txt; *.csv)};dbq=" & Path.GetDirectoryName(Server.MapPath(filename)) & ";extensions=asc,csv,tab,txt;"

    ' create your excel connection object using the connection string
    Dim objXConn As New System.Data.Odbc.OdbcConnection(xConnStr.Trim())
    objXConn.Open()

    Dim objCommand As New OdbcCommand(String.Format("SELECT * FROM " & Path.GetFileName(Server.MapPath(filename)), objXConn))

    If objXConn.State = ConnectionState.Closed Then
        objXConn.Open()
    Else
        objXConn.Close()
        objXConn.Open()
    End If

    ' create a DataReader
    Dim dr As OdbcDataReader
    dr = objCommand.ExecuteReader()

3 个答案:

答案 0 :(得分:2)

您的问题的解决方案如下:

Dim xConnStr As String = "Driver={Microsoft Text Driver (*.txt; *.csv)};dbq=" & Path.GetDirectoryName(Server.MapPath(filename)) & ";extensions=asc,csv,tab,txt;" 

    ' create your excel connection object using the connection string 
    Dim objXConn As New System.Data.Odbc.OdbcConnection(xConnStr.Trim()) 

    Dim objCommand As New OdbcCommand(String.Format("SELECT * FROM " & Path.GetFileName(Server.MapPath(filename)), objXConn)) 

    objCommand.Connection.Open()


    ' create a DataReader 
    Dim dr As OdbcDataReader 
    dr = objCommand.ExecuteReader()

连接传递给命令,但命令需要打开连接,如上所示,行objCommand.Connection.Open() 因此删除初始objXconn.Open()

答案 1 :(得分:0)

由于您没有将OdbcConnection用于create the command,因此在执行命令之前需要在命令上设置Connection property

objCommand.Connection = objXConn

答案 2 :(得分:0)

在调用ExecuteReader之前,你可能已经关闭了它。

//this line has rightly assign the connection to the command
Dim objCommand As New OdbcCommand(String.Format("SELECT * FROM " & Path.GetFileName(Server.MapPath(filename)), objXConn))

但连接必须处于打开状态。你可能会在某处以某种方式关闭它

If objXConn.State = ConnectionState.Closed Then
    objXConn.Open()
Else
    objXConn.Close()
    objXConn.Open()
End If