所以这是我的问题:
目前我正在努力制作一份报告,显示第一班和第二班,多天......
因此,如果他们选择6/02 - 6/04的范围,我将运行3次查询...一次为6月2日,6月3日和6月4日......他们也可以选择班次,所以这将是那些日期,但是第一班的时间是凌晨4:30至4:30 ....
目前我有一个错误,当我试图将我的查询/调用放在for循环中时...我计算两个日期的差异并将它们设置得很好,它只是我的连接字符串给我错误:
如果图像不容易看到,这里是错误的文字说明:
'/ 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
答案 0 :(得分: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
答案 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()
,释放连接资源。