Nunca te va a funcionar si el comando.ExecuteNonQuery() no lo pones dentro del Try/Catch...
De todos modos es una función un poco tosca, porque más que controlar si falla, deberías verificar si existe antes de enviar a hacer una tarea que no podrá obtener...
Código vb.net:
Ver originalPublic Function InsertarRegistro(ByRef IdMes As String, ByRef TxMes As String)
Dim actualizasql As String
Dim comando As MySqlCommand
Try
connecttosql()
conn.Open()
actualizasql = "SELECT COUNT(*) FROM MESES WHERE mes_id = '" & idmes & "';"
comando = New MySqlCommand(actualizasql, conn)
If Convert.ToInt32(comando.ExecuteNonQuery)>0 Then
MessageBox.Show("El mes ingresado ya existe.", "Error de Ingreso", MessageBoxButtons.OK, MessageBoxIcon.Error)
Return False
Else
actualizasql = "INSERT INTO MESES VALUES('" & idmes & "', '" & txmes & "');"
comando = New MySqlCommand(actualizasql, conn)
comando.ExecuteNonQuery
Return True
End If
Catch ex As MySqlException
MessageBox.Show("Error de base de datos en la funcion de ingreso..", "Error de MySQL", MessageBoxButtons.OK, MessageBoxIcon.Error)
Return False
Catch ex As Exception
MessageBox.Show("Error de ejecución en la función de ingreso", "Error de aplicacion", MessageBoxButtons.OK, MessageBoxIcon.Error)
Return False
End Try
End Function
Este ejemplo te muestra una forma esquematizada de cómo verificar e insertar. Estoy asumiendo que
connecttosql() es una función o método que crea una conexión sin abrirla (cosa que me parece ineficiente), y luego dentro de este caso lo abres. Además estoy imaginando que hay un campo mes_id que conserva el id del mes. Si es otro el nombre o el campo, debes ponerlo allí.
Ten en cuenta que una Exception puede capturar casi cualquier excepción, pero no identificarlas por clase de objeto; en cambio una MysqlException te permite capturar la excepción
si y sólo si es un error de la base. Por eso van en ese orden.