GAMBIARRA

W8.LISBOA 19/05/2016 19:14:35
#462292
Senhores, quero a opinião de vocês, tenho uma gambiarra query com um laço for next para carregar os parâmetros do meu insert conforme abaixo:

For i As Integer = 0 To DataGridView1.Rows.Count - 1
cmd.Parameters.Clear()
cmd.Parameters.Add([Ô]@codForma[Ô], OleDbType.Integer).Value = Convert.ToInt32(DataGridView1.Rows.Item(i).Cells(0).Value.Substring(0, 1))
cmd.Parameters.Add([Ô]@codSit[Ô], OleDbType.Integer).Value = Convert.ToInt32(DataGridView1.Rows.Item(i).Cells(1).Value.Substring(0, 1))
cmd.ExecuteNonQuery()
Next i


Como podem notar, preciso salvar o primeiro caractere de cada célula, até onde isso é seguro? ou em algum momento pode ser salvo nulo por exemplo, e minha relação vai pro ralo.
KERPLUNK 19/05/2016 19:25:34
#462295
Preencha o grid com objetos, onde o operador seja o igual [Ô]=[Ô] por padrão.
W8.LISBOA 19/05/2016 20:00:30
#462297
Mestre KERPLUNK, quanto ao preenchimento do grid, faço validações e não existe nenhuma possibilidade da célula estar vazia, o meu medo é em algum momento o processamento falhar e não salvar o primeiro caractere da célula.


JABA 19/05/2016 20:00:41
#462298
Resposta escolhida
Se você não quer correr o risco de entrar dados nulos, então você terá que fazer uma validação. Criei um exemplo aqui, qualquer coisa adapte aí.

Public IsValid(cell As DataGridViewCell) As Boolean
if (cell.Value isNot Nothing) then
return true
End if
return false
End Function


Para usar ficaria mais ou menos assim:

For i As Integer = 0 To DataGridView1.Rows.Count - 1
if IsValid(DataGridView1.Rows.Item(i).Cells(0)) AndAlso IsValid(DataGridView1.Rows.Item(i).Cells(1)) then
cmd.Parameters.Clear()
cmd.Parameters.Add([Ô]@codForma[Ô], OleDbType.Integer).Value = Convert.ToInt32(DataGridView1.Rows.Item(i).Cells(0).Value.Substring(0, 1))
cmd.Parameters.Add([Ô]@codSit[Ô], OleDbType.Integer).Value = Convert.ToInt32(DataGridView1.Rows.Item(i).Cells(1).Value.Substring(0, 1))
cmd.ExecuteNonQuery()
End if
Next

Tópico encerrado , respostas não são mais permitidas