Principales respuestas
Controlar Error con TRY

Pregunta
-
Hola,
Tengo una Tabla con el Campo Id INT INDENTITY(1,1) y TipoCuentas NOT NULL UNIQUE. Cuando ingreso un dato repetido lo controla el TRY pero el Id se incrementa igual.
Que puedo hacer para que el Id solo se incremente cuando se inserta el registro ?
Private Sub BtnAgregar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnAgregar.Click Try CN.Open() CMD.CommandType = CommandType.Text CMD.CommandText = "INSERT INTO TipoCuentas(TipoCuenta) VALUES('" & TextTipoCuenta.Text & "')" CMD.ExecuteNonQuery() CN.Close() Catch ex As SqlException CN.Close() MessageBox.Show("error") End Try End Sub
Respuestas
-
holaque db estas utilizando es Sql Server, Ms Access, o alguna otra ?la verdad es raro este comportamiento, pero si es el tipo de campo el que controla la secuencia de los id no hay mucho por hacer ya que es la db quien lo controla.- una alternativa es que tu quieres controlar la secuencia de los id de la tablao sea previo a al la ejecucion del INSERT deberias ejecutar algo como ser:SELECT MAX(Id) As Count FROM TipoCuentasde esta forma obtienes el ultimo numero utilizado, al cual le sumas uno y procedes con el insert de esta formaDim maxId As Integer = 'aqui asignas el valor de la consulta anterior +1INSERT INTO TipoCuentas(Id, TipoCuenta) VALUES(" & maxId & ", '" & TextTipoCuenta.Text & "')"si se que es bastante manuales esta alternativa pero te da el control absoluto en la creacion de los id de als tablas.- igual una consulta molesta tanto que se creen espacios entre los id, si igual son simples identificadores de los registros porque es que quieres mantener una secuencia perfecta.saludos
Leandro Tuttini
Blog
Buenos Aires
Argentina- Marcado como respuesta Vito2009 domingo, 4 de octubre de 2009 20:10
Todas las respuestas
-
holaPrueba con lo siguiente
Imports System.Transactions Private Sub BtnAgregar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnAgregar.Click Try Using scope As New TransactionScope() CN.Open() CMD.CommandType = CommandType.Text CMD.CommandText = "INSERT INTO TipoCuentas(TipoCuenta) VALUES('" & TextTipoCuenta.Text & "')" CMD.ExecuteNonQuery() CN.Close() scope.Complete() End Using Catch ex As SqlException CN.Close() MessageBox.Show("error") End Try End Sub
saludos
Leandro Tuttini
Blog
Buenos Aires
Argentina -
Hola,
Cuando importoImports System.Transactions
Me da el siguiente error:
Advertencia 1 El espacio de nombres o el tipo especificado en las importaciones 'System.Transactions' no contienen ningún miembro público o no se encuentran. Asegúrese de que el espacio de nombres o el tipo se hayan definido y de que contengan al menos un miembro público. Asegúrese de que el nombre del elemento importado no utilice ningún alias.
-
holapero has agregado la referencia a System.Transactions ?en el proyecto ve dodne dice Referencies y agrega una nueva, por supuesto seria esta que te mencionosino tienes la referencia no podras declararla en el Importssaludos
Leandro Tuttini
Blog
Buenos Aires
Argentina -
Estimado,
Agregue la referencia y el codigo pero sigo con el mismo problema el Id internamente se sigue incrementando.
Ej:
id - Nombre
1 - a
2 - b
3 - c
Si quiero ingresar de nuevo a me da error y cuando inserto un registro valido se ya se incremento el id
id - Nombre
1 - a
2 - b
3 - c
Aquí intento ingresar nuevamente a
5 - d
6 - e
Aquí intento ingresar nuevamente a
Aquí intento ingresar nuevamente a
9 - f
.
.
.
.
.
Por cada excepcion que controle el try se incrementa el id -
holaque db estas utilizando es Sql Server, Ms Access, o alguna otra ?la verdad es raro este comportamiento, pero si es el tipo de campo el que controla la secuencia de los id no hay mucho por hacer ya que es la db quien lo controla.- una alternativa es que tu quieres controlar la secuencia de los id de la tablao sea previo a al la ejecucion del INSERT deberias ejecutar algo como ser:SELECT MAX(Id) As Count FROM TipoCuentasde esta forma obtienes el ultimo numero utilizado, al cual le sumas uno y procedes con el insert de esta formaDim maxId As Integer = 'aqui asignas el valor de la consulta anterior +1INSERT INTO TipoCuentas(Id, TipoCuenta) VALUES(" & maxId & ", '" & TextTipoCuenta.Text & "')"si se que es bastante manuales esta alternativa pero te da el control absoluto en la creacion de los id de als tablas.- igual una consulta molesta tanto que se creen espacios entre los id, si igual son simples identificadores de los registros porque es que quieres mantener una secuencia perfecta.saludos
Leandro Tuttini
Blog
Buenos Aires
Argentina- Marcado como respuesta Vito2009 domingo, 4 de octubre de 2009 20:10
-