دوست خوبم شما قبلا هم مشکلی شبیه به این داشتید مشکل شما اینه که قبل از اینکه پارامترهاتون رو تعریف کنید و بهشون مقدار بدید اون هارو insert میکنید کدتون رو به این شکل تغییر بدید :
a = DataGridView1.CurrentRow.Cells(4).Value / DataGridView2.Rows(j).Cells(4).Value
sqlcomm.Parameters.Add("@sal81", SqlDbType.Int)
sqlcomm.Parameters("@sal81").Value = a
Else : a = 0
End If
cmd.CommandText = " select * from shakhes where sal81=@sal81"
Dim dr = cmd.ExecuteReader()
If dr.hasrows = True Then
cmd.CommandText = "UPDATE shakhes SET sal81 =@sal81 WHERE idsetande = " & DataGridView2.Rows(j).Cells(4).Value
End If
If DataGridView2.Rows(j).Cells(5).Value <> 0 Then
b = DataGridView1.CurrentRow.Cells(5).Value / DataGridView2.Rows(j).Cells(5).Value
sqlcomm.Parameters.Add("@sal82", SqlDbType.Int)
sqlcomm.Parameters("@sal81").Value = b
Else : b = 0
End If
cmd.CommandText = " select * from shakhes where sal82=@sal82"
Dim dr = cmd.ExecuteReader()
If dr.hasrows = True Then
cmd.CommandText = "UPDATE shakhes SET sal82 =@sal82 WHERE idsetande = " & DataGridView2.Rows(j).Cells(5).Value
End If
البته من متوجه نشدم شما چرا از دستور Update استفاده کردید اگه میخواید سطر قبلی که تکراریه پاک شه و سطر جدید جایگزینش شه اول delete و بعد insert کنید