2015-06-02 2 views
0

Так вот мой вопрос:соединения не был инициализирован при заполнении DataSet

В настоящее время я пытаюсь сделать отчет, который будет показывать 1-й и 2-й смены, на несколько дней ...

Так если они выбирают диапазон 6/02 - 6/04, я запускаю запрос 3 раза ... один раз для 6/02, 6/03 и 6/04 ... Также они могут выбирать сдвиг, так что это будет эти даты, но 4:30 AM-4:30PM за 1-ю смену ....

В настоящее время у меня есть ошибка при попытке поставить свои запросы/вызовы внутри цикла for ... Я вычисляю разницу между двумя даты и настроить их в порядке, его просто мои подключения на строке дает мне ошибку:

enter image description here

Если изображение не так легко увидеть здесь является текст описания ошибки:

Server Error in '/mfgx_test' Application.

Fill: SelectCommand.Connection property has not been initialized.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.InvalidOperationException: Fill: SelectCommand.Connection property has not been initialized.

Source Error:

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

Source File: C:\inetpub\wwwroot\mfgx_test\defectsbyround.aspx.vb
Line: 625

Что приводит меня к считаю, что что-то не так с моя строка соединения будучи вне моего цикл ... Мой код выглядит следующим образом (хотя немного очищен так легче читать):

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 
+1

Ну, вы закрываете соединение * внутри *, так что в следующий раз ... если вы хотите его повторно использовать, тогда закройте, когда цикл будет выполнен. –

+0

Это не классический ASP, это Asp.Net, написанный на VB.Net – haim770

+0

Его на моем файле .aspx.vb, Понял, что это было немного ... но когда я выбираю vb.net, цвета на моей части кода исчезли поэтому я оставил его, но спасибо за разъяснение –

ответ

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 
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() будет вызываться, освобождая ресурсы соединения.

Смежные вопросы