【问题标题】:Connection property has not been initialized when filling a DataSet填充数据集时连接属性尚未初始化
【发布时间】:2015-06-02 15:20:23
【问题描述】:

所以这是我的问题:

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

因此,如果他们选择 6/02 - 6/04 范围,我将运行 3 次查询...一次用于 6/02、6/03 和 6/04...他们还可以选择班次,所以应该是那些日期,但是第一班是凌晨 4:30 到下午 4:30....

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

如果图片不好看这里是错误的文字描述:

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

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

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

异常详情:System.InvalidOperationException:填写: SelectCommand.Connection 属性尚未初始化。

来源错误:

第 623 行:将 dsTop1 调暗为新数据集 第 624 行:将 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

【问题讨论】:

  • 那么你关闭连接inside循环所以下一轮......如果你想重用它然后在循环完成时关闭。
  • 这不是经典的 ASP,而是用 VB.Net 编写的 Asp.Net
  • 它在我的 .aspx.vb 文件中,我认为两者都有点...但是当我选择 vb.net 时,我的代码部分的颜色消失了,所以我把它关掉了,但是谢谢你澄清一下
  • 还有@AlexK。我不知道我是怎么错过的,但非常感谢:D

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


【解决方案1】:

这是因为您正在关闭循环内的连接,因此对于下一次迭代,没有打开的连接存在,因此出现异常(见下文)

   myCn1.Close()
    myCn1 = Nothing

您应该在循环上下文之外声明Dataset 和tableadapter。您的代码应如下所示

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

【讨论】:

    【解决方案2】:

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

    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(),释放连接资源。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-25
      • 2014-03-06
      • 1970-01-01
      • 1970-01-01
      • 2011-08-10
      • 2014-04-20
      • 1970-01-01
      • 2012-05-03
      相关资源
      最近更新 更多