填充DataSet时尚未初始化Connection属性

时间:2015-06-02 15:20:24

标签: asp.net connection-string server-error

所以这是我的问题:

目前我正在努力制作一份报告,显示第一班和第二班,多天......

因此,如果他们选择6/02 - 6/04的范围,我将运行3次查询...一次为6月2日,6月3日和6月4日......他们也可以选择班次,所以这将是那些日期,但是第一班的时间是凌晨4:30至4:30 ....

目前我有一个错误,当我试图将我的查询/调用放在for循环中时...我计算两个日期的差异并将它们设置得很好,它只是我的连接字符串给我错误:

enter image description here

如果图像不容易看到,这里是错误的文字说明:

  

'/ mfgx_test'应用程序中的服务器错误。

     

Fill:SelectCommand.Connection属性尚未初始化。

     

描述:执行期间发生了未处理的异常   当前的网络请求。请查看堆栈跟踪了解更多信息   有关错误的信息以及它在代码中的起源。

     

异常详细信息:System.InvalidOperationException:Fill:   SelectCommand.Connection属性尚未初始化。

     

来源错误:

     

623行:Dim dsTop1 As New DataSet Line 624:Dim daTop1   如新的SqlDataAdapter(strSql,myCn1)第625行:
  daTop1.Fill(dsTop1)第626行:第627行:myCn1.Close()

     

源文件:C:\ inetpub \ wwwroot \ mfgx_test \ defectsbyround.aspx.vb
  行:625

这让我觉得我的连接字符串在我的for循环之外出了问题...我的代码如下(虽然有点清理,所以更容易阅读):

    Dim myCn1 As New SqlConnection
    myCn1.ConnectionString = "server=Blah;database=Blah;user id=Blah;password=Blah"
    myCn1.Open()

    For i = 0 To Session("DaysDiff")
        strSql = "Blah.Blah"
        Dim dsTop1 As New DataSet
        Dim daTop1 As New SqlDataAdapter(strSql, myCn1)
        daTop1.Fill(dsTop1)

        myCn1.Close()
        myCn1 = Nothing

        If dsTop1.Tables(0).Rows.Count > 0 Then
           spitout2(dsTop1)
        End If

           txtStartdate.Text = DateAdd("d",1,txtStartdate.Text)
           txtEnddate.Text = DateAdd("d",1,txtEnddate.Text)
   Next

2 个答案:

答案 0 :(得分:1)

那是因为你正在关闭循环中的连接,所以对于下一次迭代,没有打开的连接,因此异常(见下文所示)

   myCn1.Close()
    myCn1 = Nothing

您应该在循环上下文中声明Datasettableadapter。您的代码应该如下所示

Dim myCn1 As New SqlConnection
myCn1.ConnectionString = "server=Blah;database=Blah;user id=Blah;  password=Blah"
myCn1.Open()
Dim dsTop1 As New DataSet
Dim daTop1

For i = 0 To Session("DaysDiff")
    strSql = "Blah.Blah"
    daTop1 As New SqlDataAdapter(strSql, myCn1)
    daTop1.Fill(dsTop1)

 .......
Next

     myCn1.Close()
    myCn1 = Nothing

答案 1 :(得分:0)

假设您要在循环内重用连接,请使用Using循环之外的for语句自动释放连接

Using myCn1 As New SqlConnection("server=Blah;database=Blah;user id=Blah;password=Blah")
    myCn1.Open()

    For i = 0 To Session("DaysDiff")
        strSql = "Blah.Blah"
        Dim dsTop1 As New DataSet
        Dim daTop1 As New SqlDataAdapter(strSql, myCn1)
        daTop1.Fill(dsTop1)

        If dsTop1.Tables(0).Rows.Count > 0 Then
           spitout2(dsTop1)
        End If

           txtStartdate.Text = DateAdd("d",1,txtStartdate.Text)
           txtEnddate.Text = DateAdd("d",1,txtEnddate.Text)
    Next

End Using

到达End Using时,将调用SqlConnection.Dispose(),释放连接资源。