2013-12-22 3 views
0
cmd = New SqlCommand("select enrollment,total_fee,discount,net_fee from stu_dtl", openConnection()) 
     ' dr = cmd.ExecuteReader 
     adpt = New SqlDataAdapter(cmd) 
     adpt.Fill(ds, "stu_dtl") 
     dt = ds.Tables("stu_dtl") 
For i = 0 To dt.Rows.Count - 1 
       cmd = New SqlCommand("update stu_dtl set net_fee = '" & (Val(dt.Rows(i).Item("total_fee")) - Val(dt.Rows(i).Item("discount"))) & "' where enrollment = '" & dt.Rows(i).Item("enrollment") & "'", openConnection()) 
      cmd.ExecuteNonQuery() 
     Next 

, когда я выполняю этот код для более чем 150 записей «Ничего не происходит» ...... что я делаю неправильно? Есть ли какой-либо другой способ обновления?Выполнение запроса на обновление внутри цикла

+0

Если мне что-то не хватает, вам не нужен какой-либо из этого кода. Просто создание запроса на обновление SQL и выполнение ExecuteNonQuery будут делать то же самое. – peterG

ответ

1

Я не уверен, что вы делаете неправильно. Но попробуйте этот код. Если возникает ошибка, это гарантирует откат базы данных. Обратите внимание, что я предполагаю, что тип данных столбцов net_fee и enrollment равен Integer.

Using connection As SqlConnection = New SqlConnection("TODO: Set connection string.") 

    Dim table As DataTable = New DataTable("stu_dtl") 
    Dim [error] As Exception = Nothing 

    Using command As SqlCommand = connection.CreateCommand() 
     command.CommandText = "SELECT [enrollment], [total_fee], [discount], [net_fee] FROM [stu_dtl];" 
     Using adapter As New SqlDataAdapter(command) 
      adapter.Fill(table) 
     End Using 
    End Using 

    Using transaction As SqlTransaction = connection.BeginTransaction() 
     Try 

      Dim net_fee As Integer = 0 
      Dim enrollment As Integer = 0 

      For Each row As DataRow In table.Rows 

       net_fee = (CInt(row.Item("total_fee")) - CInt(row.Item("discount"))) 
       enrollment = CInt(row.Item("enrollment")) 

       Using command As SqlCommand = connection.CreateCommand() 
        command.CommandText = "UPDATE [stu_dtl] SET [net_fee] = @net_fee WHERE [enrollment] = @enrollment;" 
        command.Parameters.AddWithValue("@net_fee", net_fee) 
        command.Parameters.AddWithValue("@enrollment", enrollment) 
        command.ExecuteNonQuery() 
       End Using 

      Next 

      transaction.Commit() 

     Catch ex As Exception 
      [error] = ex 
      transaction.Rollback() 
     End Try 
    End Using 

    If (Not table Is Nothing) Then 
     table.Dispose() 
     table = Nothing 
    End If 

    If (Not [error] Is Nothing) Then 
     Throw [error] 
    End If 

End Using 

Редактировать

Давай думать об этом, вы можете захотеть изменить net_fee столбец в computed column. Формула просто будет ([total_fee] - [discount]).

+0

Вычисленный столбец, безусловно, лучший вариант .... все еще не мог понять, почему запрос не работал. в любом случае спасибо за помощь – user108

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